文章13 | 阅读 5131 | 点赞0
上一篇文章了解到curator提供了丰富的zookeeper客户端api操作,同时curator-recipes丰富了zookeeper应用场景,下面我们学习使用curator客户端进行服务注册与管理的dubbo。
curator基础篇学习地址:zookeeper java api 操作(四) | curator_青枫绿屿的博客-CSDN博客
curator-recipes学习地址:zookeeper java api 操作(五) | curator-recipes_青枫绿屿的博客-CSDN博客
随着互联网的飞速发展,web应用的规模不断扩大,最终发现传统的垂直体系结构(ORM)已经不能满足这种需求。分布式服务体系结构和流计算体系架构势在必行,迫切需要一个管理系统来保证体系结构的有序演进。
apache dubbo是一个高性能、轻量级、基于java的rpc框架。dubbo提供三大关键功能,包括基于接口的远程调用、容错和负载平衡以及自动服务注册和发现。
上图dubbo官网提供的架构图,容器(spring等)负责启动加载和运行服务Provider,provider在它已启动就注册它的服务到Registry上,消费者Consumer在启动时就从Registry上订阅它需要服务,Register返回服务列表给Consumer并且当服务变更时通过长连接推送变更消息给Consumer。Provider和Consumer都将计算服务调用的次数和内存中的时间消耗,并每分钟发送统计信息进行监视。
dubbo支持多种协议(dubbo://,rmi://,hessian://,http://,webservice://,thrift://,memcached://,redis://,rest://)和多种注册中心(Multicast Registry,Zookeeper Registry Server,Nacos Registry Center,Redis Registry Server,Simple Registry Server),服务Provider会export service时会遍历注册至容器中的所有注册中心和支持的协议,并依次注册。
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo</artifactId>
<version>2.7.3</version>
</dependency>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-dependencies-zookeeper</artifactId>
<version>2.7.3</version>
</dependency>
public interface DemoService {
String sayHello(String name);
}
public class DemoServiceImpl implements DemoService {
@Override
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 from provider: " + RpcContext.getContext().getLocalAddress();
}
}
<context:property-placeholder/>
<dubbo:application name="demo-provider"/>
<dubbo:registry address="zookeeper://${zookeeper.address:127.0.0.1}:2181"/>
<dubbo:protocol name="dubbo" port="20880" dispatcher="all" threadpool="cached" threads="2"/>
<bean id="demoService" class="org.apache.dubbo.samples.basic.impl.DemoServiceImpl"/>
<dubbo:service interface="org.apache.dubbo.samples.basic.api.DemoService" ref="demoService"/>
public class BasicProvider {
public static void main(String[] args) throws Exception {
Thread.sleep(1000);
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("spring/dubbo-demo-provider.xml");
context.start();
System.out.println("dubbo service started");
new CountDownLatch(1).await();
}
}
<context:property-placeholder/>
<dubbo:application name="demo-provider"/>
<dubbo:registry address="zookeeper://${zookeeper.address:127.0.0.1}:2181"/>
<dubbo:protocol name="dubbo" port="20880" dispatcher="all" threadpool="cached" threads="2"/>
<bean id="demoService" class="org.apache.dubbo.samples.basic.impl.DemoServiceImpl"/>
<dubbo:service interface="org.apache.dubbo.samples.basic.api.DemoService" ref="demoService"/>
public class BasicConsumer {
public static void main(String[] args) {
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("spring/dubbo-demo-consumer.xml");
context.start();
DemoService demoService = (DemoService) context.getBean("demoService");
String hello = demoService.sayHello("world");
System.out.println(hello);
}
}
先启动BasicProvider ,注册服务到zookeeper上,然后启动BasicConsumer ,获取zookeeper上的DemoService 服务,rpc调用,获取结果如下
BasicProvider控制台显示,服务启动时注册DemoService服务至zookeeper上,使用的是dubbo协议。并且响应consumer调用,打印远程IP地址。
BasicConsumer控制台显示,服务启动时订阅DemoService服务,并发起rpc请求至service provider调用,获取结果,打印provider端IP地址。
然后打开zookeeper客户端,可以看到在zookeeper中创建目录/dubbo,子节点为DemoService全路径,DemoService下有configurators,consumers,providers和routers子节点信息。
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://blog.csdn.net/qq_33513250/article/details/102727016
内容来源于网络,如有侵权,请联系作者删除!