在一些业务场景中,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实现动态调用的更多相关文章

  1. SpringBoot整合分布式ZooKeeper和Dubbo

    ZooKeeper ZooKeeper是一个分布式的,开放远吗的分布式应用程序协调服务.它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护.域名服务.分布式同步.组服务等. 服务提供者 ...

  2. Springboot 整合 Dubbo/ZooKeeper 详解 SOA 案例

    摘要: 原创出处:www.bysocket.com 泥瓦匠BYSocket 希望转载,保留摘要,谢谢!   “看看星空,会觉得自己很渺小,可能我们在宇宙中从来就是一个偶然.所以,无论什么事情,仔细想一 ...

  3. SpringBoot 整合 Dubbo 进行分布式开发

    自从Dubbo支持SpringBoot后,Dubbo与Spring的整合变得更加的简单了,下面就是完整的步骤: 1. 引入依赖 <dependency> <groupId>co ...

  4. springboot整合dubbo\zookeeper做注册中心

    springboot整合dubbo发布服务,zookeeper做注册中心.前期的安装zookeeper以及启动zookeeper集群就不说了. dubbo-admin-2.5.4.war:dubbo服 ...

  5. SpringBoot整合dubbo

    Dubbo是阿里巴巴公司开源的一个高性能优秀的服务框架,使得应用可通过高性能的 RPC 实现服务的输出和输入功能,可以和Spring框架无缝集成. 以上介绍来源于百度百科,具体dubbo相关可以自行查 ...

  6. SpringBoot 整合使用dubbo

    这里主要是按照teaey作者的spring-boot-starter-dubbo框架进行一些变化的使用 依赖包: <dependency> <groupId>com.aliba ...

  7. 【转】SpringBoot学习笔记(7) SpringBoot整合Dubbo(使用yml配置)

    http://blog.csdn.net/a67474506/article/details/61640548 Dubbo是什么东西我这里就不详细介绍了,自己可以去谷歌 SpringBoot整合Dub ...

  8. SpringBoot整合Zookeeper和Dubbo

    一.Dubbo 1. Dubbo定义 Dubbo是Alibaba开源的分布式服务框架,它最大的特点是按照分层的方式来架构,使用这种方式可以使各个层之间解耦合(或者最大限度地松耦合).从服务模型的角度来 ...

  9. spring-boot整合dubbo启动demo

    参考资料: https://docs.spring.io/spring-boot/docs/2.1.7.RELEASE/reference/html/ https://github.com/apach ...

随机推荐

  1. 怎么使Richedit中光标始终指到最后一行的最后面?

    Richedit中数据会不断增加.要始终能看到当前的数据.该怎么做? SendMessage(Memo->Handle, WM_VSCROLL, SB_BOTTOM, 0); SendMessa ...

  2. 面向对象__call__

    __call__在Python中,函数其实是一个对象: >>> f = abs>>> f.__name__'abs'>>> f(-123)123由 ...

  3. 「CF1154F」Shovels Shop【背包DP】

    题目链接 [洛谷传送门] 题解 非常简单的背包. \(f[i]\)表示购买\(i\)个物品所需要最少的花费. 不考虑免费的限制条件,那么一定是选择前\(k\)个双鞋子. 那么加入免费的条件,那么还是要 ...

  4. mysql shell 定时备份

    #!/bin/sh if [ ! -d "/data/backup" ]; then         mkdir -p /data/backup fi db_user=" ...

  5. 2019The Preliminary Contest for ICPC China Nanchang National Invitational

    The Preliminary Contest for ICPC China Nanchang National Invitational 题目一览表 考察知识点 I. Max answer 单调栈+ ...

  6. jQuery使用(十一):jQuery实例遍历与索引

    each() children() index() 一.jQuery实例遍历方法each() jQuery实例上的each()方法规定要运行的函数,并且给函数传入两个参数:index,element. ...

  7. SQL注入绕过技巧总结

    1.SQL注入过程中的处理# 终端payload编码------>web服务器解码-------->CGI脚本解码------>web应用解码----->数据库解码 浏览器.代 ...

  8. webpack构建Vue工程

    先开始webpack基本构建   创建一个工程目录 vue-structure mkdir vue-structure && cd vue-structure   安装webpack ...

  9. 程序设计-理解java继承-遁地龙卷风

    (0)写在前面 编程和现实世界是息息相关的,你是如何理解现实世界中的继承呢? 继承在编程中应理解为:对父类资源(本文只讨论方法)的使用,父类方法只提供类基本的功能,父类方法之间不存在调用关系. (1) ...

  10. Vue2.0的三种常用传值方式、父传子、子传父、非父子组件传值

    参考链接:https://blog.csdn.net/lander_xiong/article/details/79018737