spring集成mq_使用Spring Integration Java DSL与Rabbit MQ集成
spring集成mq
我最近参加了在拉斯维加斯举行的2016年Spring大会 ,很幸运地看到了我在软件世界中长期敬佩的一些人。 我亲自遇到了其中的两个人,他们实际上合并了几年前我与Spring Integration相关的一些次要贡献– Gary Russel和Artem Bilan ,他们启发了我重新审视我已经有一段时间没有使用过的Spring Integration 。
我再一次想起了Spring Integration如何使任何复杂的Enterprise集成方案看起来都很简单。 我很高兴看到基于Spring Integration Java的DSL现在已经完全集成到Spring Integration伞和更高层次的抽象中,例如Spring Cloud Stream(感谢我的好朋友和这个项目的贡献者,此介绍
Soby Chacko ),这使得某些消息驱动的场景更加容易。
在本文中,我只是在回顾与RabbitMQ的一个非常简单的集成方案,在以后的文章中,将使用Spring Cloud Stream重新实现它。
考虑一个场景,其中两个服务之间通过RabbitMQ代理相互通信,其中一个生成某种工作,另一种处理该工作。
制片人
可以使用Spring Integration Java DSL以以下方式在代码中表示工作单元产生/分发部分:
@Configuration
public class WorksOutbound {@Autowiredprivate RabbitConfig rabbitConfig;@Beanpublic IntegrationFlow toOutboundQueueFlow() {return IntegrationFlows.from("worksChannel").transform(Transformers.toJson()).handle(Amqp.outboundAdapter(rabbitConfig.worksRabbitTemplate())).get();}
}
这是非常容易理解的-该流程首先从名为“ worksChannel”的通道中读取一条消息,然后将该消息转换为json,然后使用出站通道适配器将其分发给RabbitMQ交换。 现在,消息如何到达名为“ worksChannel”的通道-我已经通过Messaging网关(Spring Integration世界的入口)配置了消息-
@MessagingGateway
public interface WorkUnitGateway {@Gateway(requestChannel = "worksChannel")void generate(WorkUnit workUnit);}
因此,现在,如果Java客户端想要向Rabbitmq派遣“工作单元”,则调用将如下所示:
WorkUnit sampleWorkUnit = new WorkUnit(UUID.randomUUID().toString(), definition);
workUnitGateway.generate(sampleWorkUnit);
我在这里刷了几件事-特别是Rabbit MQ配置,该配置由工厂运行,但是可以在此处使用
消费者
沿着生产者的思路,消费者流程将从接收来自RabbitMQ队列的消息开始,将其转换为域模型,然后处理该消息,使用Spring Integration Java DSL通过以下方式表示:
@Configuration
public class WorkInbound {@Autowiredprivate RabbitConfig rabbitConfig;@Autowiredprivate ConnectionFactory connectionFactory;@Beanpublic IntegrationFlow inboundFlow() {return IntegrationFlows.from(Amqp.inboundAdapter(connectionFactory, rabbitConfig.worksQueue()).concurrentConsumers(3)).transform(Transformers.fromJson(WorkUnit.class)).handle("workHandler", "process").get();}
}
代码应该很直观,上面的workHandler是一个简单的Java pojo,看起来像这样,完成了仅记录有效负载的非常重要的工作:
@Service
public class WorkHandler {private static final Logger LOGGER = LoggerFactory.getLogger(WorkHandler.class);public void process(WorkUnit workUnit) {LOGGER.info("Handling work unit - id: {}, definition: {}", workUnit.getId(), workUnit.getDefinition());}
}
本质上就是这样,如果使用直接的Java和原始RabbitMQ库尝试使用Spring Integration,它将提供相当出色的代码外观。
Spring Cloud Stream使整个设置更加简单,并且将成为以后的主题。
如果您有兴趣尝试一下,我已将整个代码发布在我的github仓库中 。
翻译自: https://www.javacodegeeks.com/2016/08/integrating-rabbit-mq-using-spring-integration-java-dsl.html
spring集成mq
spring集成mq_使用Spring Integration Java DSL与Rabbit MQ集成相关推荐
- 使用Spring Integration Java DSL与Rabbit MQ集成
我最近参加了在拉斯维加斯举行的2016年Spring会议 ,很幸运地看到了我在软件世界中长期敬佩的一些人. 我亲自遇到了其中的两个人,他们实际上合并了几年前我与Spring Integration相关 ...
- Spring Integration Java DSL示例–使用Jms名称空间工厂进一步简化
在较早的博客文章中,我谈到了虚拟卢布·戈德堡流程,该流程通过一系列复杂的步骤将字符串变成大写,本文的前提是引入Spring Integration Java DSL,作为通过xml配置文件定义集成流程 ...
- Spring Integration Java DSL示例
现在已经为Spring Integration引入了新的基于Java的DSL ,这使得可以使用基于纯Java的配置而不是基于Spring XML的配置来定义Spring Integration消息流. ...
- mongodb dsl_具有Java DSL的Spring Integration MongoDB适配器
mongodb dsl 1引言 这篇文章解释了如何使用Spring Integration从MongoDB数据库中保存和检索实体. 为了完成此任务,我们将使用Java DSL配置扩展来配置入站和出站M ...
- 带有Java DSL的Spring Integration MongoDB适配器
1引言 这篇文章解释了如何使用Spring Integration从MongoDB数据库中保存和检索实体. 为了实现这一点,我们将使用Java DSL配置扩展来配置入站和出站MongoDB通道适配器. ...
- RabbitMQ –使用Spring集成Java DSL串行处理消息
如果您曾经需要使用RabbitMQ来串行处理消息,并且有一群监听器来处理消息,那么我所看到的最好方法是在监听器上使用"独占消费者"标志,每个监听器上有1个线程来处理消息. 专用使用 ...
- mule esb 集成_集成框架比较– Spring集成,Mule ESB或Apache Camel
mule esb 集成 公司之间的数据交换增加了很多. 必须集成的应用程序数量也增加了. 这些接口使用不同的技术,协议和数据格式. 然而,这些应用程序的集成应以标准化的方式建模,有效实现并由自动测试支 ...
- 集成框架比较– Spring集成,Mule ESB或Apache Camel
公司之间的数据交换增加了很多. 必须集成的应用程序数量也增加了. 这些接口使用不同的技术,协议和数据格式. 但是,这些应用程序的集成应以标准化的方式建模,有效实现并由自动测试支持 . JVM环境中提供 ...
- Spring MVC集成Spring Data Reids和Spring Session实现Session共享
说明:Spring MVC中集成Spring Data Redis和Spring Session时版本是一个坑点,比如最新版本的Spring Data Redis已经不包含Jedis了,需要自行引入. ...
最新文章
- java中mypoiexception,java - 如何使用Poi获取Java中单元格的数据验证源? - 堆栈内存溢出...
- docker监控系统
- 丽水松阳计算机职业高中学校,丽水松阳职专
- setTimeout(0) 即将退役
- ConcurrentHashMap 内部实现分析
- 改变vim注释的颜色
- 安装SQL2005 29506错误码的解决方案
- 腾讯在线人数统计_PHP + REDIS 实践:统计在线人数的几种方案分析
- go 从入门到精通(二)基本数据类型和操作符
- python异步和多线程_Python 异步 IO(asyncio)、多进程、多线程性能对比
- 部署自己的tomcat,让tomcat和IIS共同享用服务器的80端口
- Android中文API(99)—— RelativeLayout
- DataGridView控件的使用 1207
- css预处理器--sass学习($变量名)
- 为什么快速排序比归并排序快
- 网站成功的三十三个法则
- OpenWrt常用命令总结
- 这些.NET开源项目你知道吗?让.NET开源来得更加猛烈些吧!(第二辑)
- Python 之 异常检测/异常点搜索
- 药品管理系统java_基于Java的药品管理系统
热门文章
- 带旋treap概念及模板,带例题:普通平衡树
- 网络流优化:-1优化与当前弧优化
- P4001-[ICPC-Beijing 2006]狼抓兔子【对偶图】
- P6348-[PA2011]Journeys【线段树优化建图,最短路】
- P2672-推销员【贪心】
- 2014 ACM/ICPC Asia Regional Xi'an Online
- 动态规划训练9 [Brackets POJ - 2955 ]
- 北方大学 ACM 多校训练赛 第十五场 欢度6.18
- 常用公有云接入——阿里
- js Date 函数方法