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集成相关推荐

  1. 使用Spring Integration Java DSL与Rabbit MQ集成

    我最近参加了在拉斯维加斯举行的2016年Spring会议 ,很幸运地看到了我在软件世界中长期敬佩的一些人. 我亲自遇到了其中的两个人,他们实际上合并了几年前我与Spring Integration相关 ...

  2. Spring Integration Java DSL示例–使用Jms名称空间工厂进一步简化

    在较早的博客文章中,我谈到了虚拟卢布·戈德堡流程,该流程通过一系列复杂的步骤将字符串变成大写,本文的前提是引入Spring Integration Java DSL,作为通过xml配置文件定义集成流程 ...

  3. Spring Integration Java DSL示例

    现在已经为Spring Integration引入了新的基于Java的DSL ,这使得可以使用基于纯Java的配置而不是基于Spring XML的配置来定义Spring Integration消息流. ...

  4. mongodb dsl_具有Java DSL的Spring Integration MongoDB适配器

    mongodb dsl 1引言 这篇文章解释了如何使用Spring Integration从MongoDB数据库中保存和检索实体. 为了完成此任务,我们将使用Java DSL配置扩展来配置入站和出站M ...

  5. 带有Java DSL的Spring Integration MongoDB适配器

    1引言 这篇文章解释了如何使用Spring Integration从MongoDB数据库中保存和检索实体. 为了实现这一点,我们将使用Java DSL配置扩展来配置入站和出站MongoDB通道适配器. ...

  6. RabbitMQ –使用Spring集成Java DSL串行处理消息

    如果您曾经需要使用RabbitMQ来串行处理消息,并且有一群监听器来处理消息,那么我所看到的最好方法是在监听器上使用"独占消费者"标志,每个监听器上有1个线程来处理消息. 专用使用 ...

  7. mule esb 集成_集成框架比较– Spring集成,Mule ESB或Apache Camel

    mule esb 集成 公司之间的数据交换增加了很多. 必须集成的应用程序数量也增加了. 这些接口使用不同的技术,协议和数据格式. 然而,这些应用程序的集成应以标准化的方式建模,有效实现并由自动测试支 ...

  8. 集成框架比较– Spring集成,Mule ESB或Apache Camel

    公司之间的数据交换增加了很多. 必须集成的应用程序数量也增加了. 这些接口使用不同的技术,协议和数据格式. 但是,这些应用程序的集成应以标准化的方式建模,有效实现并由自动测试支持 . JVM环境中提供 ...

  9. Spring MVC集成Spring Data Reids和Spring Session实现Session共享

    说明:Spring MVC中集成Spring Data Redis和Spring Session时版本是一个坑点,比如最新版本的Spring Data Redis已经不包含Jedis了,需要自行引入. ...

最新文章

  1. java中mypoiexception,java - 如何使用Poi获取Java中单元格的数据验证源? - 堆栈内存溢出...
  2. docker监控系统
  3. 丽水松阳计算机职业高中学校,丽水松阳职专
  4. setTimeout(0) 即将退役
  5. ConcurrentHashMap 内部实现分析
  6. 改变vim注释的颜色
  7. 安装SQL2005 29506错误码的解决方案
  8. 腾讯在线人数统计_PHP + REDIS 实践:统计在线人数的几种方案分析
  9. go 从入门到精通(二)基本数据类型和操作符
  10. python异步和多线程_Python 异步 IO(asyncio)、多进程、多线程性能对比
  11. 部署自己的tomcat,让tomcat和IIS共同享用服务器的80端口
  12. Android中文API(99)—— RelativeLayout
  13. DataGridView控件的使用 1207
  14. css预处理器--sass学习($变量名)
  15. 为什么快速排序比归并排序快
  16. 网站成功的三十三个法则
  17. OpenWrt常用命令总结
  18. 这些.NET开源项目你知道吗?让.NET开源来得更加猛烈些吧!(第二辑)
  19. Python 之 异常检测/异常点搜索
  20. 药品管理系统java_基于Java的药品管理系统

热门文章

  1. 带旋treap概念及模板,带例题:普通平衡树
  2. 网络流优化:-1优化与当前弧优化
  3. P4001-[ICPC-Beijing 2006]狼抓兔子【对偶图】
  4. P6348-[PA2011]Journeys【线段树优化建图,最短路】
  5. P2672-推销员【贪心】
  6. 2014 ACM/ICPC Asia Regional Xi'an Online
  7. 动态规划训练9 [Brackets POJ - 2955 ]
  8. 北方大学 ACM 多校训练赛 第十五场 欢度6.18
  9. 常用公有云接入——阿里
  10. js Date 函数方法