参数回调实现了在客户端调用服务时,将回调方法做为参数传递给服务端。当服务端提供服务时会调用执行客户回调方法,从而执行客户端自定义的一些操作。
以下为具体实现方式:
服务端服务接口
public interface CallbackService { void addListener(String key, CallbackListener listener); }
public interface CallbackListener { void changed(String msg); }
服务端接口实现
public class CallbackServiceImpl implements CallbackService { private final Map<String, CallbackListener> listeners = new ConcurrentHashMap<String, CallbackListener>(); public CallbackServiceImpl() { Thread t = new Thread(new Runnable() { public void run() { while(true) { try { for(Map.Entry<String, CallbackListener> entry : listeners.entrySet()){ try { entry.getValue().changed(getChanged(entry.getKey())); } catch (Throwable t) { listeners.remove(entry.getKey()); } } Thread.sleep(5000); // 定时触发变更通知 } catch (Throwable t) { // 防御容错 t.printStackTrace(); } } } }); t.setDaemon(true); t.start(); } public void addListener(String key, CallbackListener listener) { listeners.put(key, listener); listener.changed(getChanged(key)); // 发送变更通知 } private String getChanged(String key) { return "Changed: " + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()); } }
服务端配置
<bean id="callbackService" class="com.callback.impl.CallbackServiceImpl" />
<dubbo:service interface="com.callback.CallbackService" ref="callbackService" connections="1" callbacks="1000" protocol="dubbo">
<dubbo:method name="addListener">
<dubbo:argument index="1" callback="true" />
<!--也可以通过指定类型的方式-->
<!--<dubbo:argument type="com.demo.CallbackListener" callback="true" />-->
</dubbo:method>
</dubbo:service>
服务消费端配置
<dubbo:reference id="callbackService" interface="com.callback.CallbackService" />
服务消费端调用
CallbackService callbackService = (CallbackService) context.getBean("callbackService"); callbackService.addListener("http://10.20.160.198/wiki/display/dubbo/foo.bar", new CallbackListener(){ public void changed(String msg) { System.out.println("callback1:" + msg); } });
执行结果
callback1:Changed: 2016-06-17 14:15:05 callback2:Changed: 2016-06-17 14:15:05 callback2:Changed: 2016-06-17 14:15:06 callback1:Changed: 2016-06-17 14:15:06 callback2:Changed: 2016-06-17 14:15:11
相关推荐
- **回调调用(Callback)**:服务调用方可以提供一个回调接口,服务提供方在完成处理后,通过回调接口返回结果。 5. **Dubbo的集群策略** - **Failover重试**:失败自动切换,当调用失败时,会尝试调用其他服务...
Apache Dubbo项目 Apache Dubbo是一个基于Java的高性能开源RPC框架。 请访问以获取快速入门和文档,以及访问的新闻,常见问题解答和发行说明。 我们现在正在收集Dubbo用户信息,以帮助我们进一步改善Dubbo。...
教程视频:Dubbo是阿里巴巴公司开源的一个高性能优秀的服务框架,使得应用可通过高性能的 RPC 实现服务的输出和输入功能,可以和 Spring框架无缝集成
【Dubbo 入门教程】 分布式架构在现代互联网应用中起着至关重要的作用,而Dubbo作为一款高性能、轻量级的Java RPC框架,是许多企业和开发者构建分布式系统的首选工具。本教程旨在帮助初学者理解分布式系统的基础...
Gitlab-maven-nexus-Mysql-sonar持续集成调研报告,包括各个系统的集成配置,属性调解
【Dubbo视频教程】深入解析 Dubbo,作为阿里巴巴开源的一款高效、卓越的服务框架,它在Java Web开发领域中扮演着至关重要的角色。这个框架的主要目标是为开发者提供一种简单而强大的方式来实现服务的发布、查找和...
《Dubbo Admin 2.5.4:JDK1.8环境下的监控与管理利器》 Dubbo Admin 2.5.4 是一款专为Java开发者设计的服务治理工具,尤其适用于JDK1.8环境。它作为一个图形化的用户界面,为Dubbo服务提供便捷的监控和管理功能,...
一般dubbo的配置文件有报错的话,只要引用此约束文件就可以了.教程网上很多的
dubbo-rpc-webservice-2.8.4 dubbo-rpc-webservice-2.8.4
本代码是github下载的dubbo源码,构建好了,可直接使用,其中包含一些demo和看的过程中的一些见解(注释),还包含sentinel、ZooInspector,以及新老版本的dubbo管控台,下载下来打开可直接使用,需要安装zookeeper,...
Dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。简单的说,dubbo就是个服务框架,如果没有分布式的需求,其实是不需要用的,只有在分布式的时候,才有dubbo这样...
【标题】"incubator-dubbo-dubbo-2.6.1" 是一个Apache Incubator项目Dubbo的特定版本,这里的2.6.1表示该版本是Dubbo的稳定分支之一。 【描述】提到的"incubator-dubbo-dubbo-2.6.1"表明这是Apache孵化器中的Dubbo...
在IT行业中,Maven、Dubbo和Eclipse是三个非常重要的工具,它们分别代表了项目构建、服务治理和集成开发环境。在这个“maven+dubbo+eclipse”的案例中,我们将探讨如何结合这三个技术进行分布式服务开发。...
在IT行业中,分布式服务框架是构建大型、高可用系统的关键技术之一。本示例"**DUBBO+Zookeeper小例子**"旨在演示如何利用SpringMVC、Dubbo和Zookeeper来实现一个微服务架构。这是一次将这些组件集成到一起的实际操作...
Dubbo分布式服务架构,对于研究大型Web服务器的并发技术的同学们有帮助。
【标题】: "Dubbo与Zookeeper详细例子" 涉及的核心技术是分布式服务框架Dubbo和分布式协调服务Zookeeper。这两个组件在现代大型分布式系统中起着至关重要的作用。 【Dubbo】:Dubbo是由阿里巴巴开源的一款高性能、...
包括:接口说明、调用的url,请求方式(Get or Post or RPC协议的框架,Doubbo接口协议),请求参数、参数类型、请求参数说明,返回结果说明。 2. 有了接口文档后,我们就可以设计接口测试用例,一般接口测试的用例...
这个配置文件包含了 "dubb-admin" 运行所需的参数,如 Dubbo 服务的注册中心地址、服务提供者和消费者的信息等。你需要根据实际的项目环境来定制这些配置,确保 "dubb-admin" 能够正确地连接到你的 Dubbo 服务网络。...