spring-boot 速成(7) 集成dubbo
github上有一个开源项目spring-boot-starter-dubbo 提供了spring-boot与dubbo的集成功能,直接拿来用即可。(记得给作者点赞,以示感谢!)
下面是使用步骤,先看下工程的大致结构:
一、引入相关的依赖项
subprojects {
buildscript {
ext {
springBootVersion = '1.5.3.RELEASE'
}
repositories {
mavenLocal()
maven {
url "http://maven.aliyun.com/nexus/content/groups/public/"
}
mavenCentral()
}
dependencies {
classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
}
} apply plugin: "java"
apply plugin: "maven"
apply plugin: 'idea' targetCompatibility = 1.8
sourceCompatibility = 1.8 repositories {
mavenLocal()
maven {
url "http://maven.aliyun.com/nexus/content/groups/public/"
}
mavenCentral()
} configurations.all {
resolutionStrategy.cacheChangingModulesFor 1, "minutes"
} dependencies {
compile('io.dubbo.springboot:spring-boot-starter-dubbo:1.0.0')
compile('org.springframework.boot:spring-boot-starter-web:1.5.3.RELEASE')
}
}
这是最外层根目录下的build.gradle,关键地方就是最后dependencies引入的2个依赖项
二、service-api中定义接口
package com.cnblogs.yjmyzz.service.api; /**
* Created by 菩提树下的杨过(http:/yjmyzz.cnblogs.com) on 2017/5/21.
*/
public interface DemoService {
String hello(String nickName);
}
这一步平淡无奇,没什么好说的
三、service-provider
3.1 提供接口实现
package com.cnblogs.yjmyzz.service.impl; import com.alibaba.dubbo.config.annotation.Service;
import com.cnblogs.yjmyzz.service.api.DemoService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory; /**
* Created by 菩提树下的杨过(http:/yjmyzz.cnblogs.com) on 2017/5/21.
*/
@Service(version = "1.0.0")
public class DemoServiceImpl implements DemoService { Logger logger = LoggerFactory.getLogger(DemoServiceImpl.class); public String hello(String nickName) {
logger.info(nickName + " call me!");
return String.format("hi , %s!", nickName);
}
}
常规套路,不用多说
3.2 编写ServiceProvider主类
package com.cnblogs.yjmyzz.service; import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication; /**
* Created by yangjunming on 2017/5/21.
*/
@SpringBootApplication
public class ServiceProvider {
public static void main(String[] args) {
SpringApplication.run(ServiceProvider.class, args);
}
}
仍然是spring-boot的经典套路,跟dubbo也没任何关系
3.3 application.yml配置
server:
port: 8001 spring:
dubbo:
scan: com.cnblogs.yjmyzz.service
application:
name: provider
registry:
address: zookeeper://127.0.0.1:2181
protocol:
name: dubbo
port: 20880
这里是重点,指定了dubbo服务提供方启动所需的zk注册地址,协议类型及端口,包括扫描的包。
四、service-consumer
4.1 定义一个辅助用的Proxy
package com.cnblogs.yjmyzz.service.proxy; import com.alibaba.dubbo.config.annotation.Reference;
import com.cnblogs.yjmyzz.service.api.DemoService;
import org.springframework.stereotype.Component; /**
* Created by yangjunming on 2017/5/21.
*/
@Component
public class ServiceProxy { @Reference(version = "1.0.0")
public DemoService demoService;
}
就是一个标准的spring组件(不管是叫proxy还是叫container都无所谓,随个人喜好),在该组件中持有对Service的引用实例,注意:如果指定了version,则该版本号要与service-provider中的版本号一致
4.2 调用服务
package com.cnblogs.yjmyzz.service; import com.cnblogs.yjmyzz.service.proxy.ServiceProxy;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext; /**
* Created by 菩提树下的杨过(http:/yjmyzz.cnblogs.com) on 2017/5/21.
*/
@SpringBootApplication
public class ServiceConsumer { public static void main(String[] args) {
ConfigurableApplicationContext ctx = SpringApplication.run(ServiceConsumer.class, args);
ServiceProxy proxy = ctx.getBean(ServiceProxy.class);
System.out.println(proxy.demoService.hello("菩提树下的杨过"));//调用服务
}
}
一看即明,不多解释。
4.3 application.yml配置
server:
port: 8002 spring:
dubbo:
scan: com.cnblogs.yjmyzz.service
application:
name: consumer
registry:
address: zookeeper://127.0.0.1:2181
ok,搞定!
上述示例源代码,已托管至github,有需要的朋友自行下载:https://github.com/yjmyzz/spring-boot-dubbo-demo
spring-boot 速成(7) 集成dubbo的更多相关文章
- Java框架Spring Boot & 服务治理框架Dubbo & 应用容器引擎Docker 实现微服务发布
微服务系统架构实践 开发语言Java 8 框架使用Spring boot 服务治理框架Dubbo 容器部署Docker 持续集成Gitlab CI 持续部署Piplin 注册中心Zookeeper 服 ...
- spring boot / cloud (三) 集成springfox-swagger2构建在线API文档
spring boot / cloud (三) 集成springfox-swagger2构建在线API文档 前言 不能同步更新API文档会有什么问题? 理想情况下,为所开发的服务编写接口文档,能提高与 ...
- Spring Boot HikariCP 一 ——集成多数据源
其实这里介绍的东西主要是参考的另外一篇文章,数据库读写分离的. 参考文章就把链接贴出来,里面有那位的代码,简单明了https://gitee.com/comven/dynamic-datasource ...
- Spring Boot系列——如何集成Log4j2
上篇<Spring Boot系列--日志配置>介绍了Spring Boot如何进行日志配置,日志系统用的是Spring Boot默认的LogBack. 事实上,除了使用默认的LogBack ...
- 【ELK】4.spring boot 2.X集成ES spring-data-ES 进行CRUD操作 完整版+kibana管理ES的index操作
spring boot 2.X集成ES 进行CRUD操作 完整版 内容包括: ============================================================ ...
- 15、Spring Boot 2.x 集成 Swagger UI
1.15.Spring Boot 2.x 集成 Swagger UI 完整源码: Spring-Boot-Demos 1.15.1 pom文件添加swagger包 <swagger2.versi ...
- 14、Spring Boot 2.x 集成 Druid 数据源
14.Spring Boot 2.x 集成 Druid 数据源 完整源码: Spring-Boot-Demos
- 12、Spring Boot 2.x 集成 MongoDB
1.12 Spring Boot 2.x 集成 MongoDB 完整源码: Spring-Boot-Demos
- 11、Spring Boot 2.x 集成 HBase
1.11 Spring Boot 2.x 集成 HBase 完整源码: Spring-Boot-Demos
- 10、Spring Boot 2.x 集成 Log4j2
1.10 Spring Boot 2.x 集成 Log4j2 完整源码: Spring-Boot-Demos
随机推荐
- Web性能优化系列(3):如何延迟加载JS
本文由 伯乐在线 - J.c 翻译,sunbiaobiao 校稿.未经许可,禁止转载!英文出处:www.feedthebot.com.欢迎加入翻译小组. 延迟加载JavaScript JavaScri ...
- Javascript摸拟自由落体与上抛运动 说明!
JavaScript 代码 //**************************************** //名称:Javascript摸拟自由落体与上抛运动! //作者:Gloot //邮箱 ...
- 第9月第27天 AVAssetExportSession AVAssetExportPresetMediumQuality
1. AVAssetExportPresetMediumQuality和 AVAssetExportPreset960x540 码率相差很大,视频大小也会相差很大 AVAssetExportPrese ...
- 第9月第12天 lua_push lua_to luaL_check stack quick
1. c代码中通过lua_push 把数据压入堆栈,lua调用c函数得到数据.luaL_check是对lua_to的封装,从堆栈中获取lua代码中函数调用的数据. static int lread(l ...
- C# 常用控件属性及方法介绍
C#常用控件属性及方法介绍 目录 1.窗体(Form) 2.Label (标签)控件 3.TextBox ...
- Ubuntu接显示器问题
1.Could not apply the stored configuration for monitors 解决办法:Ubuntu在开机进入桌面的时候,会调用gnome-setting-deamo ...
- mybatis多对多关联查询——(十)
1.需求 查询用户及用户购买商品信息. 2 sql语句 查询主表是:用户表 关联表:由于用户和商品没有直接关联,通过订单和订单明细进行关联,所以关联表: orders.orderdetail. ...
- oracel 复制A列的内容到列
update jieguo1 t set t.chinesetablename =t.tablezhushi where length(t.chinesetablename) >= 15 and ...
- nio--自己总结
阻塞/非阻塞 + 同步/异步 其实,这两者存在本质的区别,面向的对象是不同的. 阻塞/非阻塞:进程/线程需要操作的数据如果尚未就绪,是否妨碍了当前进程/线程的后续操作. 同步/异步:数据如果尚未就 ...
- 当Python与数模相遇
数模有一个题目要处理杭州自行车在每个站点可用数量和已经借出数量,这数据在www.hzbus.cn上可以获取,它是10分钟更新一次的.这些数据手动获取,需要不停的刷页面,从6:00am到9:00pm,显 ...