欢迎您访问365答案网,请分享给你的朋友!
生活常识 学习资料

分布式Dubbo+zookeeper+SpringBoot

时间:2023-06-16
分布式Dubbo+zookeeper+SpringBoot 服务发现

服务发现,即消费端自动发现服务地址列表的能力,是微服务框架需要具备的关键能力,借助于自动化的服务发现,微服务之间可以在无需感知对端部署位置与 IP 地址的情况下实现通信。

实现服务发现的方式有很多种,Dubbo 提供的是一种 Client-based 的服务发现机制,通常还需要部署额外的第三方注册中心组件来协调服务发现过程,如常用的 Nacos、Consul、Zookeeper 等,Dubbo 自身也提供了对多种注册中心组件的对接,用户可以灵活选择。

Dubbo 基于消费端的自动服务发现能力,其基本工作原理如下图:

服务发现的一个核心组件是注册中心,Provider 注册地址到注册中心,Consumer 从注册中心读取和订阅 Provider 地址列表

注册中心推荐zookeeper

下载链接:在3.5.5版本后,官方提供了bin的包,可以不需要配置环境,直接上手查看

http://mirror.bit.edu.cn/apache/zookeeper/

之后以管理员方式启动bin文件夹中的cmd文件

会报错,我们需要吧conf里的,zoo_simple复制一份,改成zoo.cof

dubbo-admin

下载地址:GitHub - apache/dubbo-admin at master-0.2.0

选择master 0.2.0分支

进入E:StudyJavatoolsdubbo-admin-master-0.2.0dubbo-adminsrcmainresources

端口号默认 2181 如需修改这里也要修改

之后我们用cmd打开 E:StudyJavatoolsdubbo-admin-master-0.2.0dubbo-admin,

输入mvn clean package -Dmaven.test.skip=true,打成jar包

时间会有点久

切记

要先启动zookeeper server,再运行jar包

访问 http://localhost:7001/

用户名和密码都是 root

zookeeper:注册中心

dubbo-admin:是一个监控管理后台

Dubbo :jar包

服务注册发现实战

创建两个项目

provider 提供者

consumer 消费者

配置:privoder 端口配置为8081 custom 端口配置为 8082

先创建provider项目

1、导入依赖(如果使用高版本的会报错,降低版本再试)

org.apache.dubbodubbo-spring-boot-starter2.7.12 com.github.sgroschupfzkclient0.1org.apache.curatorcurator-framework2.12.0org.apache.curatorcurator-recipes2.12.0org.apache.zookeeperzookeeper3.4.14org.slf4jslf4j-log4j12

2、配置properties

server.port=8001# 服务应用名字dubbo.application.name=provider_server# 注册中心地址dubbo.registry.address=zookeeper://127.0.0.1:2181# 那些服务要被注册dubbo.scan.base-packages=com.xsq.service

写业务代码

public interface TickerService { public String ticket();}

//zookeeper: 服务注册与发现@DubboService //在项目一启动就注册到注册中心@Component //为什么不加service注解,应为dubbo的注册service,用于区分public class TickerServiceImpl implements TickerService{ @Override public String ticket() { return "《java从基础到入门》"; }}

要在主类上加 @EnableDubbo

@EnableDubbo@SpringBootApplicationpublic class ProviderServerApplication {public static void main(String[] args) {SpringApplication.run(ProviderServerApplication.class, args);}}

先启动zookeeper --> 在启动Dubbo-jar包 --> 最后启动服务 访问 localhost:7001/- ->前往注册中心查看服务

可以查看这个服务的详细信息

想拿到票,需要调用远程服务,拿到我们服务之者的方法,要去注册中心拿服务

我们先要配置的custom的配置,一样需要导入相关依赖(同provider的依赖一样)。

编写配置文件:

server.port=8002# 消费者从哪里拿 需要暴露自己的名字dubbo.application.name=consumer_server# 注册中心的地址dubbo.registry.address=zookeeper://127.0.0.1:2181

之后我们需要调用本地的 @Autowired是从spring容器中本地调用,我们这里远程调用@DubboReference

package com.xsq.service;import org.apache.dubbo.config.annotation.DubboReference;import org.springframework.stereotype.Service; //注意使用的spring的@Service@Service //放到容器中 public class UserService { //想拿到provider_server提供的票,要去注册中心拿 @DubboReference//引用 方法一:Pom坐标 方法二:可以定义路径相同的接口名 TickerService tickerService; public void buyTicket(){ String ticket = tickerService.ticket(); System.out.println("在注册中心拿到=>"+ticket); }}

//要路径相同的接口名package com.xsq.service;public interface TickerService { public String ticket();}

测试

@SpringBootTestclass ConsumerServerApplicationTests { @Autowired UserService userService; @Test void contextLoads() { userService.buyTicket(); }}

从注册中心拿到了

步骤:

提供者服务

导入依赖配置文件,注册中心地址,服务发现名和要扫描的服务想要被注册的服务上加上dubbo的service(@DubboService)注解和spring的@Compent组件

消费者如何消费

导入依赖

配置文件,服务发现名,注册中心地址

我们需要在客户端建立一个一样的服务者接口,直接远程注入就可以使用这个服务的方法了,

远程调用注解@DubboReference

到这里简单的服务注册与发现的使用就完成啦,
er: 服务注册与发现

@DubboService //在项目一启动就注册到注册中心
@Component //为什么不加service注解,应为dubbo的注册service,用于区分
public class TickerServiceImpl implements TickerService{
@Override
public String ticket() {
return “《java从基础到入门》”;
}
}

要在主类上加 @EnableDubbo```java@EnableDubbo@SpringBootApplicationpublic class ProviderServerApplication {public static void main(String[] args) {SpringApplication.run(ProviderServerApplication.class, args);}}

先启动zookeeper --> 在启动Dubbo-jar包 --> 最后启动服务 访问 localhost:7001/- ->前往注册中心查看服务

[外链图片转存中…(img-YHjixKHF-1644400991628)]

可以查看这个服务的详细信息

[外链图片转存中…(img-rEJnXwZy-1644400991628)]

想拿到票,需要调用远程服务,拿到我们服务之者的方法,要去注册中心拿服务

我们先要配置的custom的配置,一样需要导入相关依赖(同provider的依赖一样)。

编写配置文件:

server.port=8002# 消费者从哪里拿 需要暴露自己的名字dubbo.application.name=consumer_server# 注册中心的地址dubbo.registry.address=zookeeper://127.0.0.1:2181

之后我们需要调用本地的 @Autowired是从spring容器中本地调用,我们这里远程调用@DubboReference

package com.xsq.service;import org.apache.dubbo.config.annotation.DubboReference;import org.springframework.stereotype.Service; //注意使用的spring的@Service@Service //放到容器中 public class UserService { //想拿到provider_server提供的票,要去注册中心拿 @DubboReference//引用 方法一:Pom坐标 方法二:可以定义路径相同的接口名 TickerService tickerService; public void buyTicket(){ String ticket = tickerService.ticket(); System.out.println("在注册中心拿到=>"+ticket); }}

[外链图片转存中…(img-9BaiOm4v-1644400991629)]

//要路径相同的接口名package com.xsq.service;public interface TickerService { public String ticket();}

测试

@SpringBootTestclass ConsumerServerApplicationTests { @Autowired UserService userService; @Test void contextLoads() { userService.buyTicket(); }}

从注册中心拿到了

[外链图片转存中…(img-SFV04r9r-1644400991629)]

步骤:

提供者服务

导入依赖配置文件,注册中心地址,服务发现名和要扫描的服务想要被注册的服务上加上dubbo的service(@DubboService)注解和spring的@Compent组件

消费者如何消费

导入依赖

配置文件,服务发现名,注册中心地址

我们需要在客户端建立一个一样的服务者接口,直接远程注入就可以使用这个服务的方法了,

远程调用注解@DubboReference

到这里简单的服务注册与发现的使用就完成啦,

Copyright © 2016-2020 www.365daan.com All Rights Reserved. 365答案网 版权所有 备案号:

部分内容来自互联网,版权归原作者所有,如有冒犯请联系我们,我们将在三个工作时内妥善处理。