服务发现,即消费端自动发现服务地址列表的能力,是微服务框架需要具备的关键能力,借助于自动化的服务发现,微服务之间可以在无需感知对端部署位置与 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
下载地址: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、导入依赖(如果使用高版本的会报错,降低版本再试)
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
到这里简单的服务注册与发现的使用就完成啦,