SpringBoot中dubbo+zookeeper实现分布式开发的应用详解
作者:Listen-Y 发布时间:2023-09-13 19:04:45
标签:SpringBoot,dubbo,zookeeper,分布式
总体实现思路是启动一个生产者项目注册, 将所含服务注册到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
翻译成功
来源:https://blog.csdn.net/Shangxingya/article/details/109840365


猜你喜欢
- 本文为大家分享了java interface的两个经典用法,供大家参考,具体内容如下1.Java多态接口动态加载实例编写一个通用程序,用来计
- 这篇文章主要介绍了java文件下载代码实例(单文件下载和多文件打包下载),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考
- 建立Android项目,如果会的话特别简单,不会的话让自己去琢磨也需要一定的时间!小编之后将自己学习Android的经验给大家分享出来!1、
- 接收到这样一个需求,就是英文名字中firstName和lastName,其中任何一个为null,就返回Empty。刚拿到需求,这不简单,if
- 样例 近期要做一个含有两个tab切换页面,两个页面有公共的描述信息区
- 本文实例为大家分享了Java中Stream流去除List重复元素的具体代码,供大家参考,具体内容如下业务场景在开发中我们常常需要过滤List
- RMI 介绍RMI (Remote Method Invocation) 模型是一种分布式对象应用,使用 RMI 技术可以使一个 JVM 中
- 实时代码模板(Live Templates)我们先来看一个gif图:大兄弟,你看清我的操作了么?这个就是实时代码模板的功能。我们来看一下怎么
- 一、什么是JSONJSON: JavaScript Object Notation JS对象简谱,是一种类似于XML的语言。相比于XML,它
- 使用@RequestParam注解获取参数创建Hello控制器类package com.controller;import org.spri
- 本文实例讲述了Android编程简单设置ListView分割线的方法。分享给大家供大家参考,具体如下:<LinearLayout xm
- 这篇文章中我们来继续学习Picasso中还提供了哪些扩展功能,一个好的框架一定是扩展性强的,你需要的我刚好有。下面看一下都提供了哪些扩展功能
- Feign远程调用Multipartfile参数今天在写业务代码的时候遇到的问题, 前端请求A服务,能正确把参数给到A服务<参数里面包
- import java.io.FileNotFoundException;import java.io.FileOutputStream;i
- System.getProperty(user.dir)定位问题前言随着学习java web 的深入学习,为了巩固自己的学习成果,练习了一个
- 一、:: 双冒号操作符在 Kotlin 中 , :: 双冒号操作符 的作用是 获取 类 , 对象 , 函数 , 属性 的 类型对象 引用 ;
- 自用项目中统一Eclipse格式化Java、JavaScript、JSP、HTML代码设置1.Window->Preferences
- Bean是Spring框架中最核心的两个概念之一(另一个是面向切面编程AOP)。1 定义Spring 官方文档对 bean 的解释是:In
- 本文介绍了Android 实现截屏方式整理,分享给大家。希望对大家有帮助可能的需求:截自己的屏截所有的屏带导航栏截屏不带导航栏截屏截屏并编
- 前言前段时间看到了豆瓣FM的音乐播放界面,有一个环形的进度条,非常的好看,于是想了想,为什么不自己做一个呢,于是就开始了自定义的过程豆瓣FM