本篇文章给大家分享的是有关SpringBoot中如何实现集成dubbo和Zookeeper,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。
dubbo是阿里巴巴公司开源的一个高性能优秀的服务框架,一款高性能、轻量级的开源Java RPC框架,它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。
zookeeper
zooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。
SpringBoot整合dubbo和Zookeeper
1、了解Dubbo基本概念
服务提供者(Provider):暴露服务的服务提供方,服务提供者在启动时,向注册中心注册自己提供的服务。
服务消费者(Consumer):调用远程服务的服务消费方,服务消费者在启动时,向注册中心订阅自己所需的服务,服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。
注册中心(Registry)(中台):注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者
监控中心(Monitor):服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心
他们的关系如下:
1、服务容器启动后,运行加载服务提供者provider;
2、服务提供者成功启动,往注册中心提供自己能提供的服务;
3、服务消费者consumer成功启动,往注册中心订阅自己要消费的服务;
4、注册中心Registry返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。
5、服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。
6、服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心。
2、在docker中安装zookeeper
安装:
(自动获取到最新的zookeeper版本) docker pull zookeeper
启动:
docker run --name zk01 -p 2181:2181 --restart always -d 6ad6cb039dfa
6ad6cb039dfa(镜像id)
阿里云安全组规则和Linux系统防火墙都记得开放2181端口。
3、新建工程(1)新建工程,工程里新建两个模块,provider模块
(2)consumer模块
4、给两个模块导入相同的pom.xml文件
  zkclient使用起来还是有点坑,注意清除一些包中依赖,也是看狂神视频学到的,这里在使用2.7.7版本时候用了新的注解出了点问题,还是改回来使用2.7.3,使用新版本还有点点区别,在代码中我也给出一些警示了。
<dependencies>
<!-- dubbo 7.3倒是可以,7.7的就出错连接不上了-->
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>2.7.3</version>
</dependency>
<!-- zookeeper client zkclient-->
<!-- https://mvnrepository.com/artifact/com.github.sgroschupf/zkclient -->
<dependency>
<groupId>com.github.sgroschupf</groupId>
<artifactId>zkclient</artifactId>
<version>0.1</version>
</dependency>
<!-- 引入zookeeper 避开连接的坑 -->
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-framework</artifactId>
<version>2.12.0</version>
</dependency>
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-recipes</artifactId>
<version>2.12.0</version>
</dependency>
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.4.14</version>
<!--排除这个slf4j-log4j12-->
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</exclusion>
</exclusions>
</dependency>
5、添加service层售票接口、接口实现类  (1)ITicketService
public interface ITicketService {
String saleTicket(String name);
}
  (2)TicketServiceImpl
注意使用的包名称一定要一致,不是spring带的Service
package top.weidaboy.provider.service.Impl;
import org.apache.dubbo.config.annotation.Service;
import org.springframework.stereotype.Component;
import top.weidaboy.provider.service.ITicketService;
//zookeeper:服务注册与发现
@Service //使用后被注入,项目已启动就自动注册到注册中心
@Component //放到spring容器中去
//新版:import org.apache.dubbo.config.annotation.DubboService;
//@DubboService //将服务发布出去
public class TicketServiceImpl implements ITicketService {
@Override
public String saleTicket(String name) {
return "确认买票: "+name;
}
}
6、application.proterties文件配置dubbo详细信息
server.port=8081
#当前应用起名
dubbo.application.name=provider-server
#找到zookeeper注册中心地址
dubbo.registry.address=zookeeper://你的IP:2181
#扫描提供指定包下的服务
dubbo.scan.base-packages=top.weidaboy.provider.service
7、启动服务提供者代码
  启动成功后,该程序会往对应的注册中心地址注册新的服务,供给需要消费的消费者使用
8、编写服务消费者代码
  既然有了服务提供者,那么就在consumer模块中创建消费者来使用服务,分以下三步:
(1)创建消费者服务,以及实现接口
  UserService:
public interface IUserService {
//买票
String buyTicket(String name);
}
   UserServiceImpl:
@Service//注入到容器中, 这个import org.springframework.stereotype.Service;
public class UserServiceImpl implements IUserService {
@Reference
//远程引用指定的服务,
//该注解会按照全类名来进行匹配,看是哪个给注册中心注册了这个全类名
ITicketService ticketService; //相同的接口名
@Override
public String buyTicket(String name) {
return ticketService.saleTicket(name);
}
}
(2)在consumer模块中添加服务提供者的接口代码
  要求:在consumer模块提供方的代码路径必须与provider模块的路径一样,只需导入接口类
ITicketService:
public interface ITicketService {
String saleTicket(String name);
}
 代码结构如图:丑了点嘿嘿,凑合看吧
(3)修改application.proterties文件
  注意:这是在consumer模块下的文件,因为消费者只是需要消费服务,无须注册,就可以不用扫描对应的服务包名了
server.port=8082 #需要不同端口
#给当前应用起名:
dubbo.application.name=consumer-server
#注册中心
dubbo.registry.address=zookeeper://你的IP:2181
9、编写测试类
@SpringBootTest
class WeidaboyApplicationTests {
@Autowired
IUserService userService;
@Test
void contextLoads() {
System.out.println(userService.buyTicket("唐人街探案三"));
}
}
10、测试调用不同端口的服务
  运行测试类,要求我们刚刚启动的服务提供者的程序不要关闭,并且两个端口不能相互占用,注册中心地址一样。
以上就是SpringBoot中如何实现集成dubbo和Zookeeper,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注亿速云行业资讯频道。
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。