SpringBoot dubbo zookeeper分布式 SpringBoot中dubbo+zookeeper实现分布式开发的应用详解
Listen-Y 人气:0总体实现思路是启动一个生产者项目注册, 将所含服务注册到zookeeper的注册中心, 然后在启动一个消费者项目,将所需服务向zookeeper注册中心进行订阅, 等待注册中心的通知
注册中心基于负载均衡算法给消费者匹配到合适的生产者主机,然后通知消费者可以使用
实现生产者
导入zookeeper依赖包
<!-- Dubbo Spring Boot Starter --> <dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo-spring-boot-starter</artifactId> <version>2.7.3</version> </dependency> <!--zookeeper的包--> <!-- https://mvnrepository.com/artifact/com.github.sgroschupf/zkclient --> <dependency> <groupId>com.github.sgroschupf</groupId> <artifactId>zkclient</artifactId> <version>0.1</version> </dependency> <!-- 引入zookeeper --> <!--【新版的坑】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>
配置服务名字, 注册中心地址, 扫描被注册的包
server.port=8081 #当前应用名字 dubbo.application.name=provider-server #注册中心地址 dubbo.registry.address=zookeeper://127.0.0.1:2181 #扫描指定包下服务 dubbo.scan.base-packages=com.demo.service
实现一个接口,在接口中完成需求
public interface Translate { String translate(String str); }
public interface Translate { String translate(String str); }
实现一个消费者
导入依赖, 和生产者的依赖是相同的
配置服务名字,注册中心地址
server.port=8082 # 配置zookeeper # 配置服务名字 dubbo.application.name=consumer.server # 配置注册中心地址 dubbo.registry.address=zookeeper://127.0.0.1:2181
本来正常步骤是需要将服务提供者的接口打包,然后用pom文件导入,我们这里使用简单的方式,直接将服务的接口拿过来,路径必须保证正确,即和服务提供者相同
实
现获取翻译服务
package com.demo.service; import org.apache.dubbo.config.annotation.Reference; import org.springframework.stereotype.Service; @Service //使用Spring的Service添加组件 public class Translation { @Reference //远程引用指定的服务,他会按照全类名进行匹配,看谁给注册中心注册了这个全类名 private Translate translate; public String getTranslation(String str) { return translate.translate(str); } }
实现controller
@RestController public class TranslateController { @Autowired Translation translation; @RequestMapping("/tran/{str}") public String tran(@PathVariable("str")String str) { return translation.getTranslation(str); } }
测试
首先启动zookeeper服务器和dubbo进入到监控页面中
切记不要关闭服务器和dubbo开启生产者这个springboot项目
上图显示就是生产者注册成功, 我们可以点击ip查看详情
启动消费者这个springboot项目
访问地址, 但是要注意我们消费者的tomcat启动端口已经换成8082
翻译成功
加载全部内容