分布式Dubbo+zookeeper+SpringBoot

分布式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:\Study\Java\tools\dubbo-admin-master-0.2.0\dubbo-admin\src\main\resources

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

在这里插入图片描述

之后我们用cmd打开 E:\Study\Java\tools\dubbo-admin-master-0.2.0\dubbo-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、导入依赖(如果使用高版本的会报错,降低版本再试)

		<!--dubbo-->
		<dependency>
			<groupId>org.apache.dubbo</groupId>
			<artifactId>dubbo-spring-boot-starter</artifactId>
			<version>2.7.12</version>
		</dependency>

		<!--zkclient,zookeeper客户端--> 
		<dependency>
            <groupId>com.github.sgroschupf</groupId>
			<artifactId>zkclient</artifactId>
			<version>0.1</version>
		</dependency>

		<!-- 引入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>

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
@SpringBootApplication
public 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();
}

测试

@SpringBootTest
class ConsumerServerApplicationTests {

    @Autowired
    UserService userService;

    @Test
    void contextLoads() {
        userService.buyTicket();
    }
}

从注册中心拿到了

在这里插入图片描述

步骤:

  1. 提供者服务

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

    1. 导入依赖

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

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

      远程调用注解@DubboReference

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

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




要在主类上加 @EnableDubbo

```java
@EnableDubbo
@SpringBootApplication
public 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();
}

测试

@SpringBootTest
class ConsumerServerApplicationTests {

    @Autowired
    UserService userService;

    @Test
    void contextLoads() {
        userService.buyTicket();
    }
}

从注册中心拿到了

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

步骤:

  1. 提供者服务

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

    1. 导入依赖

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

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

      远程调用注解@DubboReference

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Boot是一个开源的Java框架,用于快速构建独立的、基于Spring的应用程序。它简化了Spring应用程序的配置和部署过程,并提供了许多嵌入式服务器,如Tomcat、Jetty等。Spring Boot还提供了自动配置的特性,可以根据类路径中的依赖自动配置Spring应用程序。 Dubbo是一款高性能的分布式服务框架,也是阿里巴巴开源的项目。它提供了服务治理、远程通讯和分布式调用等功能,帮助开发人员轻松构建分布式服务化的应用。 Zookeeper是一个开源的分布式协调服务,可以用于实现分布式应用程序的一致性和可靠性。它提供了一个类似于文件系统的层次化的命名空间,并允许开发人员注册、协调和共享各种资源,如配置信息、服务注册和发现等。 当使用Spring Boot结合DubboZookeeper时,可以构建一个高性能、可扩展和可靠的微服务架构。Spring Boot提供了便利的开发和部署方式,Dubbo提供了分布式服务框架的支持,而Zookeeper则提供了分布式协调服务。开发人员可以使用Spring Boot快速构建独立的微服务应用程序,使用Dubbo进行服务间的通信和管理,同时通过Zookeeper进行服务的注册和发现。这样的架构可以方便地实现微服务架构中的资源共享和服务治理等功能,大大简化了开发人员的负担。 综上所述,Spring Boot结合DubboZookeeper可以构建高效、可靠的微服务架构,并提供了便利的开发和部署方式,帮助开发人员构建高性能的分布式应用程序。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值