Apache Dubbo 是一款微服务开发框架,它提供了 RPC通信 与 微服务治理 两大关键能力。这意味着,使用 Dubbo 开发的微服务,将具备相互之间的远程发现与通信能力, 同时利用 Dubbo 提供的丰富服务治理能力,可以实现诸如服务发现、负载均衡、流量调度等服务治理诉求。同时 Dubbo 是高度可扩展的,用户几乎可以在任意功能点去定制自己的实现,以改变框架的默认行为来满足自己的业务需求。
zk参考:https://blog.csdn.net/qq_43472877/article/details/111177298
dubbo参考:https://blog.csdn.net/muriyue6/article/details/109304584
dubbo官方文档:https://dubbo.apache.org/zh/docs/quick-start/
dubbo示例代码:https://github.com/apache/dubbo-samples
1、下载zookeeper:https://dlcdn.apache.org/zookeeper/
会列出很多,下载最新版本的,要下载带bin的文件:apache-zookeeper-3.7.0-bin.tar.gz
2、解压,找到/conf/zoo_sample.cfg复制一个,修改名字为:zoo.cfg
3、找到/bin/zkServer.cmd这是服务端,以管理员身份运行,要开启,保持不要关闭。可能会报错:ZooKeeper audit is disabled.
需要编辑zkServer.cmd,在call %JAVA%后加上"-Dzookeeper.audit.enable=true" 注意前后空格隔开
4、管理员身份运行客户端/bin/zkCli.cmd,保持开启,不要关闭。zookeeper端口默认是2181
5、客户端可以执行命令:
create /keyname value 创建一个键值对
应该还有其他命令,命令的作用,我还没研究。
6、下载dubbo-admin,这是一个服务监控程序,可以看到注册了哪些服务:https://github.com/apache/dubbo-admin/
解压,然后cmd进入解压目录,然后执行命令 mvn clean compile package -Dmaven.test.skip=true,打包dubbo,要下包很慢。也可以用idea打开,自动导入包,然后打包。
dubbo-admin的账户密码默认是root、root。最新版的前端是用vue写的,我执行npm install总是不成功,建议下载 master-0.2.0这个。
运行dubbo-admin,访问:http://localhost:7001/,可以看到所有注册的服务和相关监控信息。
7、执行jar包,进入jar包目录 java -jar jar包路径
8、服务端和消费端pom.xml依赖,pom依赖是一样的,我用的最新版本的dubbo V3.0.2
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | <dependencies> <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> <dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo-dependencies-zookeeper</artifactId> <version>3.0.2</version> <type>pom</type> <exclusions> <exclusion> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo-spring-boot-starter</artifactId> <version>3.0.2</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency> </dependencies> |
老是报错:log4j的警告,百度了说是log4j和logback冲突,搞半天也没解决。
9、服务端接口与启动类标注
1 2 3 4 | package com.jay.service; public interface BookService { String getBook(); } |
实现:类上面要加@DubboService,标注这是一个要注册到zookeeper的dubbo服务
1 2 3 4 5 6 7 8 9 | package com.jay.service; import org.apache.dubbo.config.annotation.DubboService; @DubboService public class BookServiceImpl implements BookService { @Override public String getBook() { return "《星辰变》" ; } } |
服务端的启动类要开启Dubbo服务发现,要标注@EnableDubbo,不然发现不了你写的@DubboService,就没法注册到zookeeper了。
1 2 3 4 5 6 7 8 9 10 11 | package com.jay; import org.apache.dubbo.config.spring.context.annotation.EnableDubbo; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @EnableDubbo @SpringBootApplication public class ProviderServerApplication { public static void main(String[] args) { SpringApplication.run(ProviderServerApplication. class , args); } } |
10、消费端,需要引入服务端打包后的jar包,或者建一个和服务端一样路径(包名)和名称的接口,我用的是后者。
1 2 3 4 5 6 7 8 9 10 11 12 13 | package com.jay.service; import org.apache.dubbo.config.annotation.DubboReference; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class UserService { @DubboReference private BookService bookService; @GetMapping( "/test" ) public String test() { return bookService.getBook(); } } |
自动注入的bookService上面标注@DubboReference,说明他是要去指定的服务器中寻找的。
保持zookeeper的zkServer.cmd和zkCli.cmd都是以管理员角色开着。
运行服务端和消费端,访问消费端:http://localhost:9002/test,就会输出了。
11、配置文件忘了说,补上
服务端配置:四个配置,端口号、服务名称、服务注册地址和端口、服务扫描包名
1 2 3 4 | server.port=9001 dubbo.application.name=provider-server dubbo.registry.address=zookeeper: //127.0.0.1:2181 dubbo.scan. base -packages=com.jay.service |
消费端配置:
1 2 3 4 | server.port=9002 dubbo.application.name=consumer-server dubbo.registry.address=zookeeper: //127.0.0.1:2181 dubbo.scan. base -packages=com.jay.service |
结束,这只是最简单的一个例子,其他的我还没研究,谁研究的多,请留言告诉我一下,谢了。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
2016-08-17 Unity(一)介绍与基本使用