失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > spring boot 整合Dubbo/Zookeeper

spring boot 整合Dubbo/Zookeeper

时间:2022-05-21 20:30:26

相关推荐

spring boot 整合Dubbo/Zookeeper

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》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。