大丰做网站哪家好,做企业网站10万起步,曲阜企业网站建设,网络服务费税收分类编码我最近参加了在拉斯维加斯举行的2016年Spring会议 #xff0c;很幸运地看到了我在软件世界中长期敬佩的一些人。 我亲自遇到了其中的两个人#xff0c;他们实际上合并了几年前我与Spring Integration相关的一些小贡献– Gary Russel和Artem Bilan #xff0c;他们启发了我重… 我最近参加了在拉斯维加斯举行的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集成世界的入口配置了消息- 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 Mill配置它是在磨房中运行的可在此处获得 消费者 沿着生产者的思路消费者流程将从接收来自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