SpringBoot整合Dubbo,并实现dubbo实现动态调用
在一些业务场景中,CP定单提交过来,需要提交到不同的通道进行业务处理
本文通过Dubbo以定义一个interface,各个通道方来实现这个接口。通过group来区分不同的通道
有需要的同学可以下载 示例代码
项目结构如下:interface,provider,consumer

1.创建接口
public interface HelloService {
String sayHello(String name);
//支付接口
PayResult pay(PayInfo pay);
}
2.创建provider
pom中添加依赖
<dependency>
<groupId>com.alibaba.boot</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>0.2.1-SNAPSHOT</version>
</dependency> <!-- Dubbo -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>dubbo</artifactId>
<version>2.6.5</version>
</dependency>
<!-- Spring Context Extras -->
<dependency>
<groupId>com.alibaba.spring</groupId>
<artifactId>spring-context-support</artifactId>
<version>1.0.2</version>
</dependency>
编写接口两个实现

@Service(
version = "1.0.0",
application = "${dubbo.application.id}",
protocol = "${dubbo.protocol.id}",
registry = "${dubbo.registry.id}",
group = "pay1"
)
public class DefaultHello1Service implements HelloService { @Override
public String sayHello(String name) {
return name+"aaaaaaas";
} @Override
public PayResult pay(PayInfo pay) {
PayResult result=new PayResult();
result.setResult(true);
result.setMsg("from pay1");
return result;
}
}
添加Dubbo配置项
dubbo.scan.basePackages = com.glory.study.provider1.service # Dubbo Config properties
## ApplicationConfig Bean
dubbo.application.id = dubbo-provider-demo
dubbo.application.name = dubbo-provider-demo ## ProtocolConfig Bean
dubbo.protocol.id = dubbo
dubbo.protocol.name = dubbo
dubbo.protocol.port = 30102 ## RegistryConfig Bean
dubbo.registry.id = my-registry
dubbo.registry.address = zookeeper://127.0.0.1:2181
启动,成功,通过dubboadmin可以看到刚才的两个服务分别属于pay1和pay2两个分组

3.服务好了,下面消费都通过ReferenceConfig动态调用
public class PayUtils {
private static ApplicationConfig application = new ApplicationConfig();
private static Map<String, RegistryConfig> registryConfigCache = new ConcurrentHashMap<>();
private static Map<String, ReferenceConfig<HelloService>> referenceCache = new ConcurrentHashMap<>();
static {
application.setName("test");
}
private static RegistryConfig getRegistryConfig(String address,String group, String version) {
String key = address + "-" + group + "-" + version;
RegistryConfig registryConfig = registryConfigCache.get(key);
if (null == registryConfig) {
registryConfig = new RegistryConfig();
registryConfig.setAddress(address);
registryConfigCache.put(key, registryConfig);
}
return registryConfig;
}
/**
* 获取服务的代理对象
*
*/
private static ReferenceConfig<HelloService> getReferenceConfig( String group,String address,
String version) {
String referenceKey = group;
ReferenceConfig<HelloService> referenceConfig = referenceCache.get(referenceKey);
if (null == referenceConfig) {
referenceConfig = new ReferenceConfig<>();
referenceConfig.setApplication(application);
referenceConfig.setRegistry(getRegistryConfig(address, group, version));
referenceConfig.setInterface(HelloService.class);
referenceConfig.setVersion(version);
referenceConfig.setGroup(group);
referenceCache.put(referenceKey, referenceConfig);
}
return referenceConfig;
}
/**
* 调用远程服务
*
*/
public static PayResult invoke(PayInfo dto) {
String group=dto.getType();
String add=dto.getAddress();
String version=dto.getVersion();
ReferenceConfig<HelloService> reference = getReferenceConfig(group, add, version);
if (null != reference) {
HelloService helloService = reference.get();
if (null != helloService) {
return helloService.pay(dto);
}
}
return null;
}
}
页面调用
@RequestMapping("/dubbotest1")
public PayResult dubbotest1() {
PayInfo p=new PayInfo();
p.setAddress(address);
p.setVersion(version);
p.setType("pay1");
return PayUtils.invoke(p);
}
@RequestMapping("/dubbotest2")
public PayResult dubbotest2() {
PayInfo p=new PayInfo();
p.setAddress(address);
p.setVersion(version);
p.setType("pay2");
return PayUtils.invoke(p);
}
启动服务成功,我们看到了我们的消费者

不同的参数访问不同的接口


SpringBoot整合Dubbo,并实现dubbo实现动态调用的更多相关文章
- SpringBoot整合分布式ZooKeeper和Dubbo
ZooKeeper ZooKeeper是一个分布式的,开放远吗的分布式应用程序协调服务.它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护.域名服务.分布式同步.组服务等. 服务提供者 ...
- Springboot 整合 Dubbo/ZooKeeper 详解 SOA 案例
摘要: 原创出处:www.bysocket.com 泥瓦匠BYSocket 希望转载,保留摘要,谢谢! “看看星空,会觉得自己很渺小,可能我们在宇宙中从来就是一个偶然.所以,无论什么事情,仔细想一 ...
- SpringBoot 整合 Dubbo 进行分布式开发
自从Dubbo支持SpringBoot后,Dubbo与Spring的整合变得更加的简单了,下面就是完整的步骤: 1. 引入依赖 <dependency> <groupId>co ...
- springboot整合dubbo\zookeeper做注册中心
springboot整合dubbo发布服务,zookeeper做注册中心.前期的安装zookeeper以及启动zookeeper集群就不说了. dubbo-admin-2.5.4.war:dubbo服 ...
- SpringBoot整合dubbo
Dubbo是阿里巴巴公司开源的一个高性能优秀的服务框架,使得应用可通过高性能的 RPC 实现服务的输出和输入功能,可以和Spring框架无缝集成. 以上介绍来源于百度百科,具体dubbo相关可以自行查 ...
- SpringBoot 整合使用dubbo
这里主要是按照teaey作者的spring-boot-starter-dubbo框架进行一些变化的使用 依赖包: <dependency> <groupId>com.aliba ...
- 【转】SpringBoot学习笔记(7) SpringBoot整合Dubbo(使用yml配置)
http://blog.csdn.net/a67474506/article/details/61640548 Dubbo是什么东西我这里就不详细介绍了,自己可以去谷歌 SpringBoot整合Dub ...
- SpringBoot整合Zookeeper和Dubbo
一.Dubbo 1. Dubbo定义 Dubbo是Alibaba开源的分布式服务框架,它最大的特点是按照分层的方式来架构,使用这种方式可以使各个层之间解耦合(或者最大限度地松耦合).从服务模型的角度来 ...
- spring-boot整合dubbo启动demo
参考资料: https://docs.spring.io/spring-boot/docs/2.1.7.RELEASE/reference/html/ https://github.com/apach ...
随机推荐
- Cookie笔记
1.Cookie HTTP Cookie(也叫Web Cookie或浏览器Cookie)是服务器发送到用户浏览器并保存在浏览器的一小块数据,它会在浏览器下次向同一服务器再发起请求时被携带并发送到服务器 ...
- 为什么要写 tf.Graph().as_default()
首先,去tensorflow官网API上查询 tf.Graph() 会看到如下图所示的内容: 总体含义是说: tf.Graph() 表示实例化了一个类,一个用于 tensorflow 计算和表示用的数 ...
- 深入理解JVM(4)——对象的创建和访问
1.对象的创建 在语言层面上,创建对象(例如克隆,反序列化)通常仅仅是一个new关键字而已. 在虚拟机中,对象(文中讨论的对象限于普通 Java 对象,不包括数组和 Class 对象等)的创建过程如下 ...
- 3.24网络攻防选拔题部分write up
20175221 3.24网络攻防选拔题部分write up Q1:百度一下,你就知道 解压题目得到一个文件夹和一个网址 打开文件夹,有三张图片 用winhex和stegsolve查看三张图片,没有 ...
- 20175221 2018-2019-2 《Java程序设计》第二周学习总结
20175221 <Java程序设计>第2周学习总结 教材学习内容总结 教材方面 本周学习了第二章的“基本数据类型与数组”的内容,以及粗略地看了一下第三章“运算符.表达式和语句”的内容 ...
- 金融量化分析【day111】:Matplotib-绘制K线图
一.绘制k线图 1.使用金融包出错解决 1.错误代码 ImportError: No module named finance 2.解决办法 https://github.com/matplotlib ...
- Entity Framework入门教程(3)---EF中的上下文简介
1.DbContext(上下文类) 在DbFirst模式中,我们添加一个EDM(Entity Data Model)后会自动生成一个.edmx文件,这个文件中包含一个继承DbContext类的上下文实 ...
- JaVa第二周学习总结
第一周学习的时候上传图片用的是网站外链然后导致出现了极为尴尬的情形...然后我就把第一周的全改成本地上传了. 首先列出所做任务 1 安装IDEA 2学习二三章视频,课本 3调试代码,上传码云 4总结问 ...
- DTO/DO等POJO对象的使用场景和 orika-mapper 框架的使用
对于项目而言, 我们一般会有DAO->Service->Controller分层设计, 这些层次体现了每层的作用, 而层次之间的数据传递对象设计很少被提及, 下面是一个相对完整的数据转换过 ...
- [物理学与PDEs]第2章习题13 将 $p$ - 方程组化为守恒律形式的一阶拟线性对称双曲组
试引进新的未知函数, 将 $p$ - 方程组 $$\beex \bea \cfrac{\p \tau}{\p t}-\cfrac{\p u}{\p x}&=0,\\ \cfrac{\p u}{ ...