SpringBoot系列教程之dubbo和Zookeeper集成方法

网友投稿 650 2023-04-17

SpringBoot系列教程之dubbo和Zookeeper集成方法

SpringBoot系列教程之dubbo和Zookeeper集成方法

今日学习新的内容:dubbo

dubbo是阿里巴巴公司开源的一个高性能优秀的服务框架,一款高性能、轻量级的开源java RPC框架,它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。

zookeeper

zooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。

SpringBoot整合dubbo和Zookeeper

1、了解Dubbo基本概念

他们的关系如下:

1、服务容器启动后,运行加载服务提供者provider;

2、服务提供者成功启动,往注册中心提供自己能提供的服务;

3、服务消费者consumer成功启动,往注册中心订阅自己要消费的服务;

4、注册中心Registry返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。

5、服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。

6、服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一uNExWGKU次统计数据到监控中心。

2、http://在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,使用新版本还有点点区别,在代码中我也给出一些警示了。

org.apache.dubbo

dubbo-spring-boot-starter

2.7.3

com.github.sgroschupf

zkclient

0.1

org.apache.curator

curator-framework

2.12.0

org.apache.curator

curator-recipes

2.12.0

org.apache.zookeeper

zookeeper

3.4.14

org.slf4j

slf4j-log4j12

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.addresshttp://=zookeeper://你的IP:2181

9、编写测试类

@SpringBootTest

class WeidaboyApplicationTests {

@Autowired

IUserService userService;

@Test

void contextLoads() {

System.out.println(userService.buyTicket("唐人街探案三"));

}

}

10、测试调用不同端口的服务

运行测试类,要求我们刚刚启动的服务提供者的程序不要关闭,并且两个端口不能相互占用,注册中心地址一样。

测试成功!

小结

本次学习内容实现:SpingBoot整合了dubbo和zookeeper实现分布式开发的应用,将提供服务和消费服务进行拆分,让不同系统去管理,整体是为了更方便,更有目的的开发项目,长路漫漫,继续前进吧!

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:SpringCloud 服务负载均衡和调用 Ribbon、OpenFeign的方法
下一篇:springboot 在xml里读取yml的配置信息的示例代码
相关文章

 发表评论

暂时没有评论,来抢沙发吧~