spring-boot 速成(7) 集成dubbo

github上有一个开源项目spring-boot-starter-dubbo 提供了spring-boot与dubbo的集成功能,直接拿来用即可。(记得给作者点赞,以示感谢!)

下面是使用步骤,先看下工程的大致结构:

一、引入相关的依赖项

复制代码
 1 subprojects {
 2     buildscript {
 3         ext {
 4             springBootVersion = '1.5.3.RELEASE'
 5         }
 6         repositories {
 7             mavenLocal()
 8             maven {
 9                 url "http://maven.aliyun.com/nexus/content/groups/public/"
10             }
11             mavenCentral()
12         }
13         dependencies {
14             classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
15         }
16     }
17 
18     apply plugin: "java"
19     apply plugin: "maven"
20     apply plugin: 'idea'
21 
22 
23     targetCompatibility = 1.8
24     sourceCompatibility = 1.8
25 
26     repositories {
27         mavenLocal()
28         maven {
29             url "http://maven.aliyun.com/nexus/content/groups/public/"
30         }
31         mavenCentral()
32     }
33 
34     configurations.all {
35         resolutionStrategy.cacheChangingModulesFor 1, "minutes"
36     }
37 
38     dependencies {
39         compile('io.dubbo.springboot:spring-boot-starter-dubbo:1.0.0')
40         compile('org.springframework.boot:spring-boot-starter-web:1.5.3.RELEASE')
41     }
42 }
View Code
复制代码

这是最外层根目录下的build.gradle,关键地方就是最后dependencies引入的2个依赖项

 

二、service-api中定义接口

复制代码
1 package com.cnblogs.yjmyzz.service.api;
2 
3 /**
4  * Created by 菩提树下的杨过(http:/yjmyzz.cnblogs.com) on 2017/5/21.
5  */
6 public interface DemoService {
7     String hello(String nickName);
8 }
View Code
复制代码

这一步平淡无奇,没什么好说的

 

三、service-provider

3.1 提供接口实现

复制代码
 1 package com.cnblogs.yjmyzz.service.impl;
 2 
 3 import com.alibaba.dubbo.config.annotation.Service;
 4 import com.cnblogs.yjmyzz.service.api.DemoService;
 5 import org.slf4j.Logger;
 6 import org.slf4j.LoggerFactory;
 7 
 8 /**
 9  * Created by 菩提树下的杨过(http:/yjmyzz.cnblogs.com) on 2017/5/21.
10  */
11 @Service(version = "1.0.0")
12 public class DemoServiceImpl implements DemoService {
13 
14     Logger logger = LoggerFactory.getLogger(DemoServiceImpl.class);
15 
16     public String hello(String nickName) {
17         logger.info(nickName + " call me!");
18         return String.format("hi , %s!", nickName);
19     }
20 }
View Code
复制代码

常规套路,不用多说

3.2 编写ServiceProvider主类

复制代码
 1 package com.cnblogs.yjmyzz.service;
 2 
 3 import org.springframework.boot.SpringApplication;
 4 import org.springframework.boot.autoconfigure.SpringBootApplication;
 5 
 6 /**
 7  * Created by yangjunming on 2017/5/21.
 8  */
 9 @SpringBootApplication
10 public class ServiceProvider {
11     public static void main(String[] args) {
12         SpringApplication.run(ServiceProvider.class, args);
13     }
14 }
View Code
复制代码

仍然是spring-boot的经典套路,跟dubbo也没任何关系

3.3 application.yml配置

复制代码
 1 server:
 2   port: 8001
 3 
 4 spring:
 5   dubbo:
 6     scan: com.cnblogs.yjmyzz.service
 7     application:
 8       name: provider
 9     registry:
10       address: zookeeper://127.0.0.1:2181
11     protocol:
12       name: dubbo
13       port: 20880
复制代码

这里是重点,指定了dubbo服务提供方启动所需的zk注册地址,协议类型及端口,包括扫描的包。

 

四、service-consumer

4.1 定义一个辅助用的Proxy

复制代码
 1 package com.cnblogs.yjmyzz.service.proxy;
 2 
 3 import com.alibaba.dubbo.config.annotation.Reference;
 4 import com.cnblogs.yjmyzz.service.api.DemoService;
 5 import org.springframework.stereotype.Component;
 6 
 7 /**
 8  * Created by yangjunming on 2017/5/21.
 9  */
10 @Component
11 public class ServiceProxy {
12 
13     @Reference(version = "1.0.0")
14     public DemoService demoService;
15 }
复制代码

就是一个标准的spring组件(不管是叫proxy还是叫container都无所谓,随个人喜好),在该组件中持有对Service的引用实例,注意:如果指定了version,则该版本号要与service-provider中的版本号一致

4.2 调用服务

复制代码
 1 package com.cnblogs.yjmyzz.service;
 2 
 3 import com.cnblogs.yjmyzz.service.proxy.ServiceProxy;
 4 import org.springframework.boot.SpringApplication;
 5 import org.springframework.boot.autoconfigure.SpringBootApplication;
 6 import org.springframework.context.ConfigurableApplicationContext;
 7 
 8 /**
 9  * Created by 菩提树下的杨过(http:/yjmyzz.cnblogs.com) on 2017/5/21.
10  */
11 @SpringBootApplication
12 public class ServiceConsumer {
13 
14     public static void main(String[] args) {
15         ConfigurableApplicationContext ctx = SpringApplication.run(ServiceConsumer.class, args);
16         ServiceProxy proxy = ctx.getBean(ServiceProxy.class);
17         System.out.println(proxy.demoService.hello("菩提树下的杨过"));//调用服务
18     }
19 }
View Code
复制代码

一看即明,不多解释。

4.3 application.yml配置

复制代码
 1 server:
 2   port: 8002
 3 
 4 spring:
 5   dubbo:
 6     scan: com.cnblogs.yjmyzz.service
 7     application:
 8       name: consumer
 9     registry:
10       address: zookeeper://127.0.0.1:2181
复制代码

ok,搞定!

 

上述示例源代码,已托管至github,有需要的朋友自行下载:https://github.com/yjmyzz/spring-boot-dubbo-demo

posted @   菩提树下的杨过  阅读(2179)  评论(4编辑  收藏  举报
编辑推荐:
· 对象命名为何需要避免'-er'和'-or'后缀
· SQL Server如何跟踪自动统计信息更新?
· AI与.NET技术实操系列:使用Catalyst进行自然语言处理
· 分享一个我遇到过的“量子力学”级别的BUG。
· Linux系列:如何调试 malloc 的底层源码
阅读排行:
· C# 中比较实用的关键字,基础高频面试题!
· .NET 10 Preview 2 增强了 Blazor 和.NET MAUI
· 为什么AI教师难以实现
· 如何让低于1B参数的小型语言模型实现 100% 的准确率
· AI Agent爆火后,MCP协议为什么如此重要!
历史上的今天:
2015-05-21 hadoop:将WordCount打包成独立运行的jar包
2013-05-21 javascript:算法笔记
2011-05-21 Silverlight Telerik控件学习:数据录入、数据验证
2010-05-21 Flash/Flex学习笔记(52):使用TweenLite
2009-05-21 Enterprise Library 4.1学习笔记1----配置应用程序块(c/s和b/s均适用)
点击右上角即可分享
微信分享提示