博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
dubbo入门(1)——dubbo-demo
阅读量:7107 次
发布时间:2019-06-28

本文共 3267 字,大约阅读时间需要 10 分钟。

hot3.png

在dubbo中,服务被注册在注册中心中,我们把提供服务的server成为服务提供方,调用服务的server称为服务调用方,两者通过RPC进行调用,并使用了dubbo协议(使用的协议可以经过配置进行修改)协调工作。这里的demo是dubbo源码中提供的demo。

准备工作

    1、这里使用zookeeper作为注册中心,所以需要准备zookeeper的可用环境。dubbo官网中推荐zookeeper作为注册中心,提供的源码内部并没有使用zookeeper,multicast广播(并没有怎么去了解)。关于zookeeper安装使用可以参考https://my.oschina.net/xianggao/blog/538867。

    2、  dubbo托管GitHub地址 

1. 服务提供方

一般是服务的实现。往往在架构层面抽象成服务层。

1.1 工程结构

150335_DQb7_3737136.png

1.2 定义服务接口 DemoService

150540_Qr1M_3737136.png

package com.alibaba.dubbo.demo;public interface DemoService {    String sayHello(String name);}

1.3 服务提供者实现接口DemoServiceImpl

150950_RCAE_3737136.png

public class DemoServiceImpl implements DemoService {    public String sayHello(String name) {        System.out.println("[" + new SimpleDateFormat("HH:mm:ss").format(new Date()) + "] Hello " + name + ", request from consumer: " + RpcContext.getContext().getRemoteAddress());        return "Hello " + name + ", response form provider: " + RpcContext.getContext().getLocalAddress();    }}

1.4 服务配置文件

服务的配置,dubbo通过xml文件扫描,在spring的启动阶段把服务注册到注册中心。这里的demoService是服务的实现者。当服务提供方获取到消费方的rpc请求后,将会调用该实现类的对应的方法运行,并把结果通过PRC返回给调用方。

1.5 服务注册

public class Provider {    public static void main(String[] args) throws Exception {        //Prevent to get IPV6 address,this way only work in debug mode        //But you can pass use -Djava.net.preferIPv4Stack=true,then it work well whether in debug mode or not        System.setProperty("java.net.preferIPv4Stack", "true");        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[]{"META-INF/spring/dubbo-demo-provider.xml"});        context.start();        System.in.read(); // press any key to exit    }}

当启动提供方应用成功后,通过日志可以看到服务已经在服务中心进行注册,并获取到如下信息:

152013_ALn5_3737136.png

  • 暴露的服务IP和端口是192.168.10.245:20880
  • 服务注册中心192.168.199.199:2181
  • 服务所在的应用名是demo-provider
  • 所暴露的服务的接口和方法是com.alibaba.dubbo.demo.DemoService

通过zookeeper的客户端连接ZK的服务,查看树的ZNode情况

[root bin]# ./zkCli.sh -server 192.168.199.144:2181

 

153341_gHiv_3737136.png

zk树中,为dubbo的服务com.alibaba.dubbo.demo.DemoService建立了一个节点,并分别建立consumers, routers, providers, configurators四个节点。这四个节点分别记录了消费方,服务路由信息,提供方,配置的一些信息。我们查看providers可以看到192.168.10.245:20880这台机器再为我们服务。

2 服务消费者 Consumer

151420_Ix61_3737136.png

2.1 消费者配置文件dubbo-demo-consumer.xml

运行消费者住程序可以看到结果Consumer

public class Consumer {    public static void main(String[] args) {        //Prevent to get IPV6 address,this way only work in debug mode        //But you can pass use -Djava.net.preferIPv4Stack=true,then it work well whether in debug mode or not        System.setProperty("java.net.preferIPv4Stack", "true");        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[]{"META-INF/spring/dubbo-demo-consumer.xml"});        context.start();        DemoService demoService = (DemoService) context.getBean("demoService"); // get remote service proxy        while (true) {            try {                Thread.sleep(1000);                String hello = demoService.sayHello("world:飞哥"); // call remote method                System.out.println(hello); // get result            } catch (Throwable throwable) {                throwable.printStackTrace();            }        }    }}

2.2运行结果如下:

152243_ra6T_3737136.png

转载于:https://my.oschina.net/u/3737136/blog/1623683

你可能感兴趣的文章
iTextSharp快速使用指南
查看>>
C语言(1+1+2+1+2+3....+n)
查看>>
浅谈 js 字符串 search 方法
查看>>
css调整图片位置布局
查看>>
华为的JAVA面试题及答案(部分)
查看>>
定时关机命令——shutdown
查看>>
基于Java的数据采集(三)
查看>>
【编程题目】最长公共字串
查看>>
lucene 专业名词作用整理
查看>>
win32 自定义右键菜单
查看>>
DRY原则和Shy原则
查看>>
Microcontroller measures resistance without an ADC
查看>>
前端翻译:Promises/A+规范
查看>>
PHP 7: PHP 变量和常量的定义
查看>>
spin_lock & mutex_lock的差别?
查看>>
curl命令具体解释
查看>>
Linux进程间通信——使用命名管道
查看>>
TestLink学习四:TestLink1.9.13使用说明
查看>>
通用分页存储过程
查看>>
神秘代码让iPhone微信闪退的解决方法
查看>>