【WEEK16】 【DAY2】Dubbo和Zookeeper集成第二部分【中文版】

news/2024/9/23 1:38:09/

2024.6.11 Tuesday
接上文【WEEK15】 【DAY4】Dubbo和Zookeeper集成第一部分【中文版】

目录

  • 18.Dubbo和Zookeeper集成
    • 18.3.测试环境搭建
      • 18.3.4.Windows下安装dubbo-admin
        • 18.3.4.1.下载dubbo-admin
        • 18.3.4.2.解压进入目录
        • 18.3.4.3.在项目目录下打包dubbo-admin
        • 18.3.4.4.执行 dubbo-admin\target 下的dubbo-admin-0.0.1-SNAPSHOT.jar
    • 18.4.SpringBoot + Dubbo + zookeeper
      • 18.4.1.框架搭建
        • 18.4.1.1.创建空项目Dubbo_zookeeper
        • 18.4.1.2.新建provider-server模块
        • 18.4.1.3.新建consumer-server模块
      • 18.4.2.修改provider-server(服务提供者)
        • 18.4.2.1.导入依赖
        • 18.4.2.2.修改pom.xml
        • 18.4.2.3.修改application.properties
        • 18.4.2.4.修改TicketServiceImpl.java
        • 18.4.2.5.运行ProviderServerApplication
      • 18.4.3.服务消费者
        • 18.4.3.1.修改pom.xml(和provider类似)
        • 18.4.3.2.修改application.properties
        • 18.4.3.3.修改UserService.java
        • 18.4.3.4.修改并运行ConsumerServerApplicationTests.java

18.Dubbo和Zookeeper集成

18.3.测试环境搭建

dubboadmin_6">18.3.4.Windows下安装dubbo-admin

dubbo本身并不是一个服务软件。它其实就是一个jar包,能够帮你的java程序连接到zookeeper,并利用zookeeper消费、提供服务。
但是为了让用户更好的管理监控众多的dubbo服务,官方提供了一个可视化的监控程序dubbo-admin,不过这个监控即使不装也不影响使用。

dubboadmin_9">18.3.4.1.下载dubbo-admin

https://github.com/apache/dubbo-admin/tree/develop在这里插入图片描述

现在官网只剩下develop版本,master版本从这个链接下载:https://github.com/wikerx/dubbo-admin-master
使用master版本进行后续操作。

18.3.4.2.解压进入目录

修改 dubbo-admin\src\main\resources \application.properties 指定zookeeper地址(刚才没有修改则不需要修改)

server.port=7001
spring.velocity.cache=false
spring.velocity.charset=UTF-8
spring.velocity.layout-url=/templates/default.vm
spring.messages.fallback-to-system-locale=false
spring.messages.basename=i18n/message
spring.root.password=root
spring.guest.password=guest
#以下是注册中心的地址
dubbo.registry.address=zookeeper://127.0.0.1:2181
dubboadmin_31">18.3.4.3.在项目目录下打包dubbo-admin

在这里插入图片描述

mvn clean package -Dmaven.test.skip=true
在这里插入图片描述

dubboadmintarget_dubboadmin001SNAPSHOTjar_37">18.3.4.4.执行 dubbo-admin\target 下的dubbo-admin-0.0.1-SNAPSHOT.jar

在这里插入图片描述

java -jar dubbo-admin-0.0.1-SNAPSHOT.jar
在这里插入图片描述

此时zookeeper的服务一定要处于打开状态,否则无法查询到。
执行完毕,访问http://localhost:7001/,输入默认账号和密码(都是root)
在这里插入图片描述
点击“登录”后:
在这里插入图片描述

可以看一下系统日志:
在这里插入图片描述

zookeeper_52">18.4.SpringBoot + Dubbo + zookeeper

18.4.1.框架搭建

zookeeper_54">18.4.1.1.创建空项目Dubbo_zookeeper

在这里插入图片描述

18.4.1.2.新建provider-server模块

在这里插入图片描述
添加web支持
在这里插入图片描述
删除多余文件
在这里插入图片描述

18.4.1.2.1.新建service文件夹,新建TicketService.java和TicketServiceImpl.java
在这里插入图片描述

18.4.1.2.2.TicketService.java

package com.P60.service;public interface TicketService {public String getTicket();
}

18.4.1.2.3.TicketServiceImpl.java

package com.P60.service;public class TicketServiceImpl implements TicketService {@Override   //alt+insert重写方法public String getTicket() {return "Dubbo+Zookeeper";}
}
18.4.1.3.新建consumer-server模块

在这里插入图片描述
添加web支持
在这里插入图片描述
删除多余文件
在这里插入图片描述

18.4.1.3.1.新建service文件夹,新建UserService.java
在这里插入图片描述

package com.P60.service;public interface UserService {//需要到注册中心取出provider-server中的票
}

18.4.2.修改provider-server(服务提供者)

18.4.2.1.导入依赖

将服务提供者注册到注册中心,我们需要整合Dubbo和zookeeper,所以需要导包。
18.4.2.1.1.Dubbo Spring Boot Starter

https://mvnrepository.com/artifact/org.apache.dubbo/dubbo-spring-boot-starter/2.7.3
<!-- https://mvnrepository.com/artifact/org.apache.dubbo/dubbo-spring-boot-starter -->
<dependency><groupId>org.apache.dubbo</groupId><artifactId>dubbo-spring-boot-starter</artifactId><version>2.7.3</version>
</dependency>

18.4.2.1.2.ZooKeeper Client

https://mvnrepository.com/artifact/com.github.sgroschupf/zkclient
<!-- https://mvnrepository.com/artifact/com.github.sgroschupf/zkclient -->
<dependency><groupId>com.github.sgroschupf</groupId><artifactId>zkclient</artifactId><version>0.1</version>
</dependency>
18.4.2.2.修改pom.xml

按照惯例修改settings中的maven,jdk和Java版本,Project Structure中的jdk和Java版本。修改pom中的springframework版本到2.7.13,重新加载Maven。

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.7.13</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.example</groupId><artifactId>provider-server</artifactId><version>0.0.1-SNAPSHOT</version><name>provider-server</name><description>provider-server</description><properties><java.version>8</java.version></properties><dependencies><!--Dubbo+zookeeper--><!-- https://mvnrepository.com/artifact/org.apache.dubbo/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><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>
18.4.2.3.修改application.properties
# 可参考D:\dubbo-admin-master-master\dubbo-admin\src\main\resources\application.properties中的配置文件
spring.application.name=provider-server
server.port=8001
# 当前应用名
dubbo.application.name=provider-server
# 注册中心地址
dubbo.registry.address=zookeeper://127.0.0.1:2181
# 扫描指定包下的服务(需要注册)
dubbo.scan.base-packages=com.P60.service
18.4.2.4.修改TicketServiceImpl.java
package com.P60.service;import org.apache.dubbo.config.annotation.Service;
import org.springframework.stereotype.Component;//使用了Dubbo后尽量不用Service注解:因为Spring和Dubbo有同名注解@Service
@Service    //使项目被扫描,自动注册到注册中心
@Component  //存放在容器中
public class TicketServiceImpl implements TicketService {@Override   //alt+insert重写方法public String getTicket() {return "Dubbo+Zookeeper";}
}
18.4.2.5.运行ProviderServerApplication

记得先运行zkServer.cmd,可以通过dubbo-admin-0.0.1-SNAPSHOT.jar访问。
访问http://localhost:7001/
选择“服务治理”->“提供者”
在这里插入图片描述
可见“提供者”:
在这里插入图片描述

点击172.18.20.16:20880查看提供者
在这里插入图片描述

18.4.3.服务消费者

18.4.3.1.修改pom.xml(和provider类似)
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.7.13</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.example</groupId><artifactId>consumer-server</artifactId><version>0.0.1-SNAPSHOT</version><name>consumer-server</name><description>consumer-server</description><properties><java.version>8</java.version></properties><dependencies><!--Dubbo+zookeeper--><!-- https://mvnrepository.com/artifact/org.apache.dubbo/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><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>
18.4.3.2.修改application.properties
spring.application.name=consumer-server
server.port=8002# 消费者获取服务需要暴露自己的名字
dubbo.application.name=consumer-server
# 注册中心的地址,可以在任何电脑上
dubbo.registry.address=zookeeper://127.0.0.1:2181
18.4.3.3.修改UserService.java
package com.P60.service;import org.apache.dubbo.config.annotation.Reference;
import org.springframework.stereotype.Service;@Service    //只是调用接口,注入到容器中
public class UserService {  //不能写成Interface接口类,因为接口是抽象的,不能再调用抽象类//需要到注册中心取出provider-server中的票->远程引用指定的服务,按照全类名进行匹配,看谁给注册中心注册了这个全类名@Reference  //引用:两种方式可解决(1.使用pom坐标;2.定义路径相同的接口名)//此处采取第二种方式:直接将provider-server中的TicketService复制一份到consumer-server中TicketService ticketService;public  void buyTicket(){String ticket = ticketService.getTicket();System.out.println("从注册中心获取"+ticket);}}
18.4.3.4.修改并运行ConsumerServerApplicationTests.java
package com.P60;import com.P60.service.UserService;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;@SpringBootTest
class ConsumerServerApplicationTests {@Autowired  //注入本地应用使用Autowired而非ReferenceUserService userService;@Testvoid contextLoads() {userService.buyTicket();}}

在这里插入图片描述
在这里插入图片描述
这就是SpingBoot + dubbo + zookeeper实现分布式开发的应用,其实就是一个服务拆分的思想。


http://www.ppmy.cn/news/1468916.html

相关文章

入门Consul注册、配置中心(代码演示)

1、安装与使用 2、注册服务到consul 3、调用consul上注册的服务 4、配置中心 1、安装与使用 官网地址&#xff1a;Install | Consul | HashiCorp Developer 下载对应的系统 解压缩后文件 打开命令行运行 consul.exe agent -dev 即可运行 可以编写一个bat脚本每次运行ba…

程序员应该有什么职业素养?

作为一名程序员&#xff0c;职业素养不仅决定了个人的职业发展&#xff0c;也直接影响到团队协作和项目的成功。那么&#xff0c;程序员在职业生涯中应具备哪些职业素养呢&#xff1f;本文将从三个主要方向进行探讨&#xff1a;专业精神、沟通能力和持续学习。这些素养不仅是程…

【iOS】UI学习——UITableView

UI学习&#xff08;四&#xff09; UITableView基础UITableView协议UITableView高级协议和单元格 UITableView基础 dateSource:数据代理对象 delegate:普通代理对象 numberOfSectionInTableView:获得组数协议 numberOfRowsInSection:获得行数协议 cellForRowAtIndexPath:创建单…

$MPC 登录MEXC,加速Partisia Blockchain 生态市场进程

Partisia Blockchain 是一个以 MPC 技术方案为基础&#xff0c;具备可审计特性的隐私 Layer1 生态&#xff0c;与此同时&#xff0c;该链通过系列创新的系统架构&#xff0c;能够兼顾高迸发、安全、可拓展性以及可互操作特性。基于系列技术特性&#xff0c;Partisia Blockchain…

【算法系列 | 13】深入解析查找算法之—树表查找

引言 查找算法在计算机科学中扮演着至关重要的角色。它们的效率直接影响到系统的性能和用户体验。树表查找&#xff08;Tree-based Search&#xff09;是一类基于树结构的查找算法&#xff0c;广泛应用于各类数据结构和数据库系统中。 本文将深入介绍树表查找算法的原理、优缺点…

6月11号作业

思维导图 #include <iostream> using namespace std; class Animal { private:string name; public:Animal(){}Animal(string name):name(name){//cout << "Animal&#xff1b;有参" << endl;}virtual void perform(){cout << "讲解员的…

vue2 element组件兼容性问题

1.el-select 聚焦问题 点两次才可以选择选项 <el-select name"XXX" v-model"form.XXX" clearable style"width: 100%":popper-append-to-body"false" popper-class"popper-select-class"change"XXX"><…

..\USER\stm32f10x.h(298): error: #67: expected a “}“

原keil4的示例工程在用keil5打开之后出现报错&#xff1a; ..\USER\stm32f10x.h(298): error: #67: expected a "}" 在去掉手动添加的一个宏定义STM32F10X_HD后即可正常编译&#xff0c;因为KEIL5已经自动添加了