SpringBoot-整合Dubbo+Zookeeper

Posted 滑稽404#

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SpringBoot-整合Dubbo+Zookeeper相关的知识,希望对你有一定的参考价值。

整合dubbo和zookeeper的时候遇到了各种乱七八糟的错误,分享一下

版本控制

  • SpringBoot2.5.2

一、添加依赖和日志配置

1、依赖

		<!--zookeeper客户端-->
		<dependency>
			<groupId>com.github.sgroschupf</groupId>
			<artifactId>zkclient</artifactId>
			<version>0.1</version>
			<exclusions>
				<exclusion>
					<groupId>org.apache.zookeeper</groupId>
					<artifactId>zookeeper</artifactId>
				</exclusion>
			</exclusions>
		</dependency>
		<!--dubbo自定义启动器-->
		<dependency>
			<groupId>org.apache.dubbo</groupId>
			<artifactId>dubbo-spring-boot-starter</artifactId>
			<version>2.7.8</version>
		</dependency>
		<!--curator提供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>

依赖试了狂神那一套报错,然后自己找了很多博客,最后好了,一直报错
不是依赖报错,就是启动报错

注意:

  1. curator依赖一定要添加,现版本zookeeper需要通过curator进行连接
  2. zkclient一定要排除zookeeper,否则会报错

2、日志配置

dubbo和zookeeper默认使用log4j作为日志,在resources目录下创建log4j.properties进行配置

log4j.rootLogger=info,ServerDailyRollingFile,stdout

log4j.appender.ServerDailyRollingFile=org.apache.log4j.DailyRollingFileAppender
log4j.appender.ServerDailyRollingFile.DatePattern='.'yyyy-MM-dd
log4j.appender.ServerDailyRollingFile.File=var/log/chinaamc/management-cockpit2.log
log4j.appender.ServerDailyRollingFile.layout=org.apache.log4j.PatternLayout
log4j.appender.ServerDailyRollingFile.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} [%t] %-5p [%c] - %m%n
log4j.appender.ServerDailyRollingFile.Append=true

log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d yyyy-MM-dd HH:mm:ss %p [%c] %m%n

二、Dubbo架构

在这里插入图片描述
调用关系说明

  • 服务容器负责启动,加载,运行服务提供者。
  • 服务提供者在启动时,向注册中心注册自己提供的服务。
  • 服务消费者在启动时,向注册中心订阅自己所需的服务。
  • 注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。
  • 服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。
  • 服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心。

Dubbo 架构具有以下几个特点,分别是连通性、健壮性、伸缩性、以及向未来架构的升级性。

其中注册中心有很多,但是我们这里使用zookeeper,一般也常用这个,因为服务都需要通过网络在注册中心里注册服务以及寻找所需服务,所以反应一般挺慢的

Dubbo官网:架构说明链接

三、提供者服务

目录结构
在这里插入图片描述

1、编写服务接口

@DubboService//发布服务
@Component//放入容器
public class TicketServiceImpl implements TicketService {
    @Override
    public String getTicket() {
        return "跟着狂神学Java";
    }
}

2、提供者服务配置

服务者需要将提供的服务扫描,交给注册中心

dubbo:
  application:
    ##1.当前服务名
    name:  provider-service
  registry:
    # TEST环境
    ##2.注册中心地址
    address: zookeeper://127.0.0.1:2181
    protocol: zookeeper
    check: false
  ##3.扫描需要注册的服务
  scan:
    base-packages: com.chime.prodiver.service
server:
  port: 8001

注意:address的ip //不要写成/

3、dubbo-admin监控查看服务

  1. 打开zookeeper服务:zkServer.cmd
  2. java -jar xxx.jar:运行dubbo-admin监控jar包
  3. 然后就可以访问 localhost:7001查看服务了(这个服务要部署,运行主程序)

![在这里插入图片描述](https://img-blog.csdnimg.cn/20210627155840416.png

服务成功注册

四、消费者服务

项目目录
在这里插入图片描述

1、编写消费者使用提供者的方法

@Service
public class BuyTicketService {
	 //远程引用指定服务,可通过全类名进行匹配,可以写模仿提供者服务的服务结构编写一个假接口给他
	 //真正生效的是提供者服务的接口
    @DubboReference
    TicketService ticketService;

    public String buyTicket(){
        return "在注册中心买到了"+ticketService.getTicket();
    }
}

2、配置

server.port=8002
#服务名
dubbo.application.name=consumer-service
#注册中心地址
dubbo.registry.address=zookeeper://127.0.0.1:2181

3、运行主程序查看服务

在这里插入图片描述

4、测试类测试远程调用

@SpringBootTest
class ConsumerServiceApplicationTests {
	@Autowired
	BuyTicketService buyTicketService;
	@Test
	void contextLoads() {
		System.out.println(buyTicketService.buyTicket());
	}

}

两个项目直接调用服务

以上是关于SpringBoot-整合Dubbo+Zookeeper的主要内容,如果未能解决你的问题,请参考以下文章

springboot整合dubbo

SpringBoot与Dubbo整合-项目搭建

SpringBoot整合dubbo+zookeeper(详细步骤)

最新官方版的SpringBoot 整合 Dubbo.md

SpringBoot整合Dubbo案例

springboot与dubbo整合