spring boot 整合Dubbo/Zookeeper
只是一个简单的整合demo,只做思路分析叙述,具体功能不做描述。
一、技术介绍
•ZooKeeper
ZooKeeper 是一个分布式的,开放源码的分布式应用程序协调服务。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。
•Dubbo
Dubbo是Alibaba开源的分布式服务框架,它最大的特点是按照分层的方式来架构,使用这种方式可以使各个层之间解耦合(或者最大限度地松耦合)。从服务模型的角度来看,Dubbo采用的是一种非常简单的模型,要么是提供方提供服务,要么是消费方消费服务,所以基于这一点可以抽象出服务提供方(Provider)和服务消费方(Consumer)两个角色
二、环境
zookeeper的docker启动
docker的相关知识请点击
Docker 介绍 安装 使用
docker pull zookeeper
docker run --name zk01 -p 2181:2181 --restart always -d zookeeper
三、搭建两个springboot项目
provider-ticket:服务提供者
1.引用相关配置依赖
2.配置相关信息
3.启动服务把服务发布出去
1、Maven依赖
<!--引入Dubbo 最新版本的2.7.7搭配的springboot 2.3.3.RELEASE--><dependency><groupId>org.apache.dubbo</groupId><artifactId>dubbo-spring-boot-starter</artifactId><version>2.7.7</version></dependency><!--引入Zookeeper客户端--><!--Zookeeper客户端市面上有三种--><!--具体了解百度Zookeeper的原生Java API、ZKClient和 Apache Curator 区别对比--><dependency><groupId>org.apache.curator</groupId><artifactId>curator-recipes</artifactId><version>2.8.0</version></dependency>
2、服务类接口
public interface TicketService {String getTicket();}
3、服务类实现
import com.caleb.ticket.service.TicketService;import org.apache.dubbo.config.annotation.DubboService;import org.ponent;@Component@DubboServicepublic class TicketServiceImpl implements TicketService {@Overridepublic String getTicket() {return "《战狼》";}}
dubbo之前版本也用的是@Service注解;新版本用@DubboService
需要加@Component注解
注解是加载到实现类上,而不是接口上
4、application.properties配置
dubbo.application.name=provider-ticket # dubbo应用名称dubbo.registry.address=zookeeper://192.168.123.138:2181 # zookeeper注册中心地址dubbo.scan.base-packages=com.caleb.ticket.service # 扫描指定包,将使用@DubboService注解修饰的类发布为服务
5、启动类
import org.apache.dubbo.config.spring.context.annotation.EnableDubbo;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication@EnableDubbopublic class ProviderTicketApplication {public static void main(String[] args) {SpringApplication.run(ProviderTicketApplication.class, args);}}
启动类要加上:@EnableDubbo 开启Dubbo
consumer-user:服务消费者
1.引用相关配置依赖
2.配置相关信息
3.把服务引入,可以调用
1、Maven依赖
<!--引入Dubbo 最新版本的2.7.7搭配的springboot 2.3.3.RELEASE--><dependency><groupId>org.apache.dubbo</groupId><artifactId>dubbo-spring-boot-starter</artifactId><version>2.7.7</version></dependency><!--引入Zookeeper客户端--><!--Zookeeper客户端市面上有三种--><!--具体了解百度Zookeeper的原生Java API、ZKClient和 Apache Curator 区别对比--><dependency><groupId>org.apache.curator</groupId><artifactId>curator-recipes</artifactId><version>2.8.0</version></dependency>
2、服务类接口
1)、直接拷贝provider-ticket项目中的TicketService
不明白为什么还要在拷贝一下消费者的service到服务类的service下面
2)、UserService类
import com.alibaba.dubbo.config.annotation.Reference;import com.caleb.ticket.service.TicketService;import org.springframework.stereotype.Service;@Servicepublic class UserService {//下面的Reference 在代码中显示超时,但是不影响使用不知道用哪个注解代替这个注解@ReferenceTicketService ticketService;public void hello() {String ticket = ticketService.getTicket();System.out.println("ticket = " + ticket);}}
3、application.properties配置
#应用名称dubbo.application.name=consumer-user#去哪里消费dubbo.registry.address=zookeeper://192.168.123.138:2181
4、测试启动类
测试是在springboot的测试方法中进行的测试,可以根据实际业务需求移植到项目本身的业务逻辑代码中。
测试注入消费者本身的UserService 调取hello方法,因为 UserService 中的hello又调用了服务提供者。
实现了远程调用,可以把提供者放到和消费者不同的主机上面,实现一个分布式远程调用。
import com.caleb.user.service.UserService;import org.junit.jupiter.api.Test;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.boot.test.context.SpringBootTest;@SpringBootTestclass ConsumerUserApplicationTests {@AutowiredUserService userService;@Testvoid contextLoads() {userService.hello();}}
5、测试步骤
先运行ProviderTicketApplication服务提供者,会注册服务。
在运行ConsumerUserApplicationTests服务消费者来调用服务提供者。
如果觉得《spring boot 整合Dubbo/Zookeeper》对你有帮助,请点赞、收藏,并留下你的观点哦!