Dubbo集成Spring与Zookeeper实例

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
注册配置 MSE Nacos/ZooKeeper,182元/月
云原生网关 MSE Higress,422元/月
简介:

使用Dubbo结合Zookeeper和Spring,

是使用比较广泛的一种组合,下面参考官方文档,做个简单的示例,一步步搭建一个使用dubbo结合Zookeeper和Spring的Demo工程。
代码已经上传到github,地址:https://github.com/bingyue/dubbodemo

1.集成Zookeeper

(1)安装Zookeeper

(2)启动Zookeeper服务

2.配置Dubbo的管理界面

Dubbo官方提供了几个管理工具,包括管理控制台dubbo-admin及简易监控中心等。
这里的Demo学习使用了最新的稳定的2.5.3版本。
官网指出在阿里巴巴内部广泛使用的GA版本为2.4.9,并且推荐此版本,
在实际项目中可以使用这一稳定版本。

(1)下载dubbo-admin,修改相关的配置

下载地址http://dubbo.io/Download-zh.htm,下载后解压war包,
找到dubbo.properties配置文件,修改其中的zookeeper地址为上面部署的zk地址。

(2)启动dubbo-admin工程

把工程文件夹放在Tomcat的工程目录下,启动后登录即可。

 

3.创建Demo项目,集成Spring

Demo项目主要是使用了CXF整合Spring创建WebService的技术,关于CXF可以参考:
WebService CXF学习(高级篇1):整合Spring框架

(1)创建服务提供接口项目

服务端接口需要单独打包,服务提供方和消费方共享,同时被提供端和消费端依赖。
1.新建Maven项目

创建dubbo-demo-api工程,pom文件如下:

1
2
3
4
5
< groupId >dubbo-demo</ groupId >
   < artifactId >dubbo-demo-api</ artifactId >
   < version >0.1</ version >
   < packaging >jar</ packaging >
   < name >dubbo-demo-api</ name >


2.编写服务接口

1
2
3
public  interface  TestService {
     public  String sayHello(String name);
}

 

(2)创建项目实现接口

1.创建具体接口实现项目

1
2
3
4
5
6
7
8
9
public  class  TestServiceImpl  implements  TestService {
     /**
      * 服务提供方实现接口:(对服务消费方隐藏实现)
      */
     public  String sayHello(String name) {
         System.out.println( "调用provider服务" );
         return  "hello" +name;
     }
}

添加api的依赖,添加Spring、dubbo和zookeeper的依赖,pom文件如下:

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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
<groupId>dubbo-demo</groupId>
   <artifactId>dubbo-demo-provider</artifactId>
   <version> 0.1 </version>
   <packaging>jar</packaging>
 
   <name>dubbo-demo-provider</name>
 
   <properties>
     <project.build.sourceEncoding>UTF- 8 </project.build.sourceEncoding>
   </properties>
   
   <dependencies>
     <dependency>
       <groupId>junit</groupId>
       <artifactId>junit</artifactId>
       <version> 3.8 . 1 </version>
       <scope>test</scope>
     </dependency>
      <!-- 添加Dubbo服务接口的依赖 -->
     <dependency>
       <groupId>dubbo-demo</groupId>
       <artifactId>dubbo-demo-api</artifactId>
       <version> 0.1 </version>
     </dependency>
     <!-- 添加Spring context依赖 -->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>org.springframework.context</artifactId>
      <version> 3.1 . 2 .RELEASE</version>
    </dependency>
     <!-- 引入Dubbo依赖 -->
     <dependency>
             <groupId>com.alibaba</groupId>
             <artifactId>dubbo</artifactId>
             <version> 2.5 . 3 </version>
         </dependency>
     <!-- zookeeper依赖 -->
     <dependency>
             <groupId>org.apache.zookeeper</groupId>
             <artifactId>zookeeper</artifactId>
             <version> 3.4 . 6 </version>
         </dependency>
     <!-- zookeeper客户端 zkclient -->
     <dependency>
          <groupId>com.github.sgroschupf</groupId>
          <artifactId>zkclient</artifactId>
          <version> 0.1 </version>
       </dependency>
   </dependencies>

2.暴露服务,整合Spring完成服务提供者

配置provider.xml:

1
2
3
4
5
6
7
8
9
10
<!-- 提供方应用信息,用于计算依赖关系 -->
     <dubbo:application name= "dubbo-demo-provider"   />
     <!-- 使用multicast广播注册中心暴露服务地址 -->
     <dubbo:registry address= "multicast://192.168.106.129:2182"  />
     <!-- 用dubbo协议在 20880 端口暴露服务 -->
     <dubbo:protocol name= "dubbo"  port= "20880"  />
     <!-- 声明需要暴露的服务接口 -->
     <dubbo:service  interface = "bingyue.dubbo.provider.TestService"  ref= "testService"  />
     <!-- 和本地bean一样实现服务 -->
     <bean id= "testService"  class = "bingyue.dubbo.provider.TestServiceImpl"  />

  

(3)创建服务消费端项目

1.创建项目和相关配置
在pom.xml中依赖接口项目:

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
< groupId >dubbo-demo</ groupId >
   < artifactId >dubbo-demo-consumer</ artifactId >
   < version >0.1</ version >
   < packaging >jar</ packaging >
   
   < dependencies >
   <!-- 添加Spring context依赖 -->
    < dependency >
      < groupId >org.springframework</ groupId >
      < artifactId >org.springframework.context</ artifactId >
      < version >3.1.2.RELEASE</ version >
    </ dependency >
    < dependency >
       < groupId >junit</ groupId >
       < artifactId >junit</ artifactId >
       < version >3.8.1</ version >
       < scope >test</ scope >
     </ dependency >
     <!-- 添加Dubbo服务接口的依赖 -->
     < dependency >
       < groupId >dubbo-demo</ groupId >
       < artifactId >dubbo-demo-api</ artifactId >
       < version >0.1</ version >
     </ dependency >
   </ dependencies >


配置consumer.xml:

1
2
3
4
5
6
7
8
9
<!-- 消费方应用名,用于计算依赖关系,不是匹配条件,不要与提供方一样 -->
     < dubbo:application  name="dubbo-demo-consumer"  />
  
     <!-- 使用multicast广播注册中心暴露发现服务地址 -->
     < dubbo:registry  address="multicast://192.168.106.129:2182" />
  
     <!-- 把接口的声明引入到本项目中,通过jar或者maven依赖都可以 -->
     <!-- 生成远程服务代理,可以和使用本地bean一样使用服务者提供的服务 -->
     < dubbo:reference  id="testService" interface="bingyue.dubbo.provider.TestService" />

  

2.配置和启动消费者服务
加载配置文件后,消费端调用服务端接口的方式有多种,可以从上下文中获取bean,也可以使用注解。

1
2
3
4
5
6
7
8
9
10
11
12
13
public  class  Tester {
     //使用注解或者使用远程服务代理取得接口实例
//  @Autowired TestService testService;
     
     public  static  void  main(String[] args){
         //加载同级目录下的消费者配置文件
         ClassPathXmlApplicationContext ctx= new  ClassPathXmlApplicationContext( "consumer.xml" );
         ctx.start();
         TestService testService = (TestService) ctx.getBean( "testService" );
         String result=testService.sayHello( "cnblogs" );
         System.out.println(result);
     }
}

  

3.使用Maven结合Dubbo

这种Dubbo使用方式可以不用考虑Maven如何单独对接口打包,
在顶层的服务提供方项目中编写接口,
消费端项目会依赖服务提供方项目的jar包,从中获得接口实例,
然后在服务方项目中新建单独的子项目去编写接口的实现类,
这样通过Maven的继承,将消费端项目和具体的接口实现类代码分离开。

 


本文转自邴越博客园博客,原文链接:http://www.cnblogs.com/binyue/p/3723460.html,如需转载请自行联系原作者

相关文章
|
27天前
|
数据可视化 Java BI
将 Spring 微服务与 BI 工具集成:最佳实践
本文探讨了 Spring 微服务与商业智能(BI)工具集成的潜力与实践。随着微服务架构和数据分析需求的增长,Spring Boot 和 Spring Cloud 提供了构建可扩展、弹性服务的框架,而 BI 工具则增强了数据可视化与实时分析能力。文章介绍了 Spring 微服务的核心概念、BI 工具在企业中的作用,并深入分析了两者集成带来的优势,如实时数据处理、个性化报告、数据聚合与安全保障。同时,文中还总结了集成过程中的最佳实践,包括事件驱动架构、集中配置管理、数据安全控制、模块化设计与持续优化策略,旨在帮助企业构建高效、智能的数据驱动系统。
将 Spring 微服务与 BI 工具集成:最佳实践
|
3月前
|
XML 人工智能 Java
Spring Boot集成Aviator实现参数校验
Aviator是一个高性能、轻量级的Java表达式求值引擎,适用于动态表达式计算。其特点包括支持多种运算符、函数调用、正则匹配、自动类型转换及嵌套变量访问,性能优异且依赖小。适用于规则引擎、公式计算和动态脚本控制等场景。本文介绍了如何结合Aviator与AOP实现参数校验,并附有代码示例和仓库链接。
178 0
|
3月前
|
安全 Java 数据库
第16课:Spring Boot中集成 Shiro
第16课:Spring Boot中集成 Shiro
569 0
|
3月前
|
消息中间件 存储 Java
第15课: Spring Boot中集成ActiveMQ
第15课: Spring Boot中集成ActiveMQ
339 0
|
4月前
|
人工智能 Java 测试技术
Spring Boot 集成 JUnit 单元测试
本文介绍了在Spring Boot中使用JUnit 5进行单元测试的常用方法与技巧,包括添加依赖、编写测试类、使用@SpringBootTest参数、自动装配测试模块(如JSON、MVC、WebFlux、JDBC等),以及@MockBean和@SpyBean的应用。内容实用,适合Java开发者参考学习。
458 0
|
29天前
|
监控 Cloud Native Java
Spring Integration 企业集成模式技术详解与实践指南
本文档全面介绍 Spring Integration 框架的核心概念、架构设计和实际应用。作为 Spring 生态系统中的企业集成解决方案,Spring Integration 基于著名的 Enterprise Integration Patterns(EIP)提供了轻量级的消息驱动架构。本文将深入探讨其消息通道、端点、过滤器、转换器等核心组件,以及如何构建可靠的企业集成解决方案。
97 0
|
7月前
|
安全 Java Apache
微服务——SpringBoot使用归纳——Spring Boot中集成 Shiro——Shiro 身份和权限认证
本文介绍了 Apache Shiro 的身份认证与权限认证机制。在身份认证部分,分析了 Shiro 的认证流程,包括应用程序调用 `Subject.login(token)` 方法、SecurityManager 接管认证以及通过 Realm 进行具体的安全验证。权限认证部分阐述了权限(permission)、角色(role)和用户(user)三者的关系,其中用户可拥有多个角色,角色则对应不同的权限组合,例如普通用户仅能查看或添加信息,而管理员可执行所有操作。
331 0
|
7月前
|
安全 Java 数据安全/隐私保护
微服务——SpringBoot使用归纳——Spring Boot中集成 Shiro——Shiro 三大核心组件
本课程介绍如何在Spring Boot中集成Shiro框架,主要讲解Shiro的认证与授权功能。Shiro是一个简单易用的Java安全框架,用于认证、授权、加密和会话管理等。其核心组件包括Subject(认证主体)、SecurityManager(安全管理员)和Realm(域)。Subject负责身份认证,包含Principals(身份)和Credentials(凭证);SecurityManager是架构核心,协调内部组件运作;Realm则是连接Shiro与应用数据的桥梁,用于访问用户账户及权限信息。通过学习,您将掌握Shiro的基本原理及其在项目中的应用。
258 0
|
7月前
|
NoSQL Java 关系型数据库
微服务——SpringBoot使用归纳——Spring Boot 中集成Redis——Redis 介绍
本文介绍在 Spring Boot 中集成 Redis 的方法。Redis 是一种支持多种数据结构的非关系型数据库(NoSQL),具备高并发、高性能和灵活扩展的特点,适用于缓存、实时数据分析等场景。其数据以键值对形式存储,支持字符串、哈希、列表、集合等类型。通过将 Redis 与 Mysql 集群结合使用,可实现数据同步,提升系统稳定性。例如,在网站架构中优先从 Redis 获取数据,故障时回退至 Mysql,确保服务不中断。
282 0
微服务——SpringBoot使用归纳——Spring Boot 中集成Redis——Redis 介绍