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 }

这是最外层根目录下的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 }

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

三、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 }

常规套路,不用多说

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 }

仍然是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 }

一看即明,不多解释。

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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏LanceToBigData

JavaWeb(三)JSP概述

一、JSP概述 1.1、JSP简介   一种动态网页开发技术。它使用JSP标签在HTML网页中插入Java代码。标签通常以<%开头以%>结束。JSP是一种Jav...

3656
来自专栏Java Web

使用RESTful风格开发Java Web

REST是REpresentational State Transfer的缩写(一般中文翻译为表述性状态转移),REST 是一种体系结构,而 HTTP 是一种包...

2275
来自专栏web编程技术分享

web项目常见错误和解决方案

41412
来自专栏yukong的小专栏

【SpringBoot2.0系列08】SpringBoot之redis数据缓存管理

【SpringBoot2.0系列02】SpringBoot之使用Thymeleaf视图模板

1884
来自专栏后端云

部署实时OpenStack实例

最近的OpenStack nova版本增加了对实时实例的支持,即提供实时应用所需的确定性和性能保证的实例。这项工作在OpenStack Ocata发行版中最终标...

3503
来自专栏一个会写诗的程序员的博客

《Springboot极简教程》问题解决:Springboot启动报错 Whitelabel Error Page: This application has no explicit mapping

首先,这个出错页面是SpringBoot的一个默认出错页面。源码在:org.springframework.boot.autoconfigure.web.ser...

1725
来自专栏流柯技术学院

linux下安装rzsz

wget http://freeware.sgi.com/source/rzsz/rzsz-3.48.tar.gz

5801
来自专栏Android知识点总结

SpringBoot-05-之上传文件

2432
来自专栏云原生架构实践

Jhipster技术栈定制 - 基于UAA的微服务之间安全调用

3个微服务都是通过Jhipster生成。 工程代码生成完之后,根据上一节启动的组件的实际情况,修改微服务配置文件中Eureka和database相关的配置。

9963
来自专栏三丰SanFeng

无锁编程(六) - seqlock(顺序锁)

seqlock(顺序锁) 用于能够区分读与写的场合,并且是读操作很多、写操作很少,写操作的优先权大于读操作。 seqlock的实现思路是,用一个递增的整型数表...

2377

扫码关注云+社区

领取腾讯云代金券