使用Spring Cloud Stream与RabbitMQ集成

在我以前的文章中,我写了两个系统之间非常简单的集成场景-一个生成一个工作单元,另一个处理该工作单元,以及Spring Integration如何使这种集成非常容易。

工作单位流

在这里,我将演示如何使用Spring Cloud Stream进一步简化此集成方案

我在这里有示例代码– pom.xml中提供了适用于Spring Cloud Stream的正确maven依赖关系。

制片人

因此,再次从负责生成工作单元的生产者开始。 将消息发送到RabbitMQ所需的代码明智的全部工作就是按照以下方式进行Java配置:

@Configuration
@EnableBinding(WorkUnitsSource.class)
@IntegrationComponentScan
public class IntegrationConfiguration {}

从表面上看,这看似简单,但在幕后做了很多事情,据我了解并从文档中了解到,这些是该配置触发的:

1.创建基于绑定到@EnableBinding批注的类的Spring Integration消息通道。 上面的WorkUnitsSource类是一个称为“ worksChannel”的自定义通道的定义,如下所示:

import org.springframework.cloud.stream.annotation.Output;
import org.springframework.messaging.MessageChannel;public interface WorkUnitsSource {String CHANNEL_NAME = "worksChannel";@OutputMessageChannel worksChannel();}

2.根据运行时可用的“绑定程序”实现(例如RabbitMQ,Kaffka,Redis,Gemfire),上一步中的通道将连接到系统中的适当结构–因此,例如,我希望我的“ worksChannel”依次发送消息到RabbitMQ,Spring Cloud Stream将负责在RabbitMQ中自动创建主题交换

我希望就数据如何发送到RabbitMQ进行一些进一步的自定义-特别是我希望域对象在发送之前先序列化为json,并且我想指定将有效负载发送到的RabbitMQ交换的名称。由某些配置控制,这些配置可以使用yaml文件以以下方式附加到通道:

spring:cloud:stream:bindings:worksChannel:destination: work.exchangecontentType: application/jsongroup: testgroup

最后一个细节是应用程序其余部分与Spring Cloud Stream交互的方式,可以通过定义消息网关直接在Spring Integration中完成:

import org.springframework.integration.annotation.Gateway;
import org.springframework.integration.annotation.MessagingGateway;
import works.service.domain.WorkUnit;@MessagingGateway
public interface WorkUnitGateway {@Gateway(requestChannel = WorkUnitsSource.CHANNEL_NAME)void generate(WorkUnit workUnit);}

基本上就是这样,Spring Cloud Stream现在将连接整个Spring集成流程,并在RabbitMQ中创建适当的结构。

消费者

与生产者类似,首先我想定义一个名为“ worksChannel”的通道,该通道将处理来自RabbitMQ的传入消息:

import org.springframework.cloud.stream.annotation.Input;
import org.springframework.messaging.SubscribableChannel;public interface WorkUnitsSink {String CHANNEL_NAME = "worksChannel";@InputSubscribableChannel worksChannel();
}

然后让Spring Cloud Stream根据此定义创建通道和RabbitMQ绑定:

import org.springframework.cloud.stream.annotation.EnableBinding;
import org.springframework.context.annotation.Configuration;@Configuration
@EnableBinding(WorkUnitsSink.class)
public class IntegrationConfiguration {}

为了处理消息,Spring Cloud Stream提供了一个侦听器,可以通过以下方式创建它:

@Service
public class WorkHandler {private static final Logger LOGGER = LoggerFactory.getLogger(WorkHandler.class);@StreamListener(WorkUnitsSink.CHANNEL_NAME)public void process(WorkUnit workUnit) {LOGGER.info("Handling work unit - id: {}, definition: {}", workUnit.getId(), workUnit.getDefinition());}
}

最后是将这个通道连接到yaml文件中表示的RabbitMQ基础结构的配置:

spring:cloud:stream:bindings:worksChannel:destination: work.exchangegroup: testgroup

现在,如果启动了生产者和任何数量的使用者,则通过生产者发送的消息将作为json发送到Rabbit MQ主题交换,由使用者检索,反序列化为对象并传递给工作处理器。

现在,纯粹由Spring Cloud Stream库按照惯例处理创建RabbitMQ基础结构所涉及的大量样板。 尽管Spring Cloud Stream尝试提供原始Spring Integration的基础,但是掌握Spring Integration的基本知识以有效使用Spring Cloud Stream还是很有用的。

此处描述的示例可在我的github存储库中找到

翻译自: https://www.javacodegeeks.com/2016/08/integrating-rabbitmq-using-spring-cloud-stream.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/351197.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ubuntu18.0.4 不能下载 libgd2-dev(ubuntu 20.04 安装perl 中GD 模块失败的解决办法)

ubuntu18.0.4 不能下载 libgd2-dev 一、错误信息: Unable to locate package libgd2-dev二、原因 没有对应源 到 https://packages.ubuntu.com/找对应名称 三、解决 18.04之后没有libgd2-dev sudo apt-get install libgd-dev参考:https://www.cnblo…

开课博客

自我介绍 对于自我介绍这篇我还是很意外的,个人信息不说了,说说自己的情况吧,当时大一的时候,感觉还是很喜欢编程的,个人感觉老师也挺喜欢我,可能大一下的时候心思多了点,慢慢的就没放多少心思在…

抓到一只苍蝇 writeup

题目在 http://ctf.idf.cn/index.php?ggame&marticle&aindex&id57 下载到的文件是misc_fly.pcapng,使用wireshark打开,能看到一堆tcp、http和dns协议混合的数据包,在上面的框里面输入http,让它只显示http协议的数据包…

ubuntu 20.04 安装circos

不需要自己手动按照,调配置 直接 sudo apt install circos一步到位

java环境变量的配置和使用

在downloads中选择JAVA DOWNLOAD进入Java下载列表 点选Accept License Agreement,选择Windows这一栏下载安装包 进入文件夹,双击应用程序根据提示进行安装,直至安装完成。 测试jdk是否安装成功,可在【开始】中搜索cmd&#xff…

perl 安装GD 出错解决方案

perl 安装GD 出错具体如下 install GD Running install for module GD Checksum for /root/.cpan/sources/authors/id/R/RU/RURBAN/GD-2.73.tar.gz ok Configuring R/RU/RURBAN/GD-2.73.tar.gz with Makefile.PL Package gdlib was not found in the pkg-config sea…

C语言学习一个月后感想

C语言学习一个月后感想 感谢李晓东老板及计算机工程师联盟的学长学姐和某神秘同级同学的辛勤指导,感谢宋雨田的督促和陪伴。 初识C的1、、体会 我本以为凭借瓜皮思维和花里胡哨操作可以让我熟练地学习语言,现在发现只是python的易入门给我的错觉。。。错…

使用Java 8处理并行数据库流

什么是并行数据库流? 阅读这篇文章,了解如何使用并行流和Speedment并行处理数据库中的数据。 在许多情况下,并行流可能比通常的顺序流快得多。 随着Java 8的引入,我们得到了期待已久的Stream库。 流的优点之一是使流并行非常容易…

idf实验室--简单编程字符统计

idf实验室--简单编程字符统计,有需要的朋友可以参考下。 第一眼看这道题很简单,不就是字符统计么,可是题目要求2s内回答,而且每次打开的页面需要统计的字符串内容都会变,这就蛋疼了,于是乎上网学习下如何提…

微服务(一) --- 架构与选型

微服务架构的概述 应用架构的发展 应用是可以独立运行的程序代码,提供相对完善的业务功能. 目前的软件架构有三种架构类型: 业务架构应用架构技术架构他们之间的甚是: 业务架构决定应用架构,技术架构支撑着应用架构. 应用架构的发展历程: 单体架构: 最古老的单体应用,没有任何应…

linux常见致命错误(fatal error),解决办法:

常见错误一&#xff1a;fatal error: zlib.h: No such file or directory 解决办法&#xff1a; sudo apt-get install zlib1g-dev 常见错误二&#xff1a;fatal error: curses.h: No such file or directory #include <curses.h> 解决办法&#xff1a;sudo apt-get i…

brainfu*k语言执行

输入&#xff1a; brainfu*k 代码&#xff1a; [>>>><<<<-]>.>....>.<<.>..------.--------.>.>. 程序&#xff1a; #include <stdio.h> #include <stdlib.h> #include <string.h> #define MAXL 1000 /*…

Linux连接Windows服务器以及文件传输方法

最近&#xff0c;由于自身需要将操作系统换为Linux&#xff08;Ubuntu&#xff09;系统&#xff0c;但是由于实验室服务器为Windows系统&#xff0c;需要在Linux上连接Windows服务器&#xff0c;方法如下&#xff1a; 首先安装rdesktop 安装方法&#xff1a; sudo apt-get ins…

Filter过滤要登录的页面(重要)

一、为什么要写过滤器&#xff0c;过滤页面&#xff1f; 本人做了一个网站&#xff0c;目前还在开发。做过滤器的目的就是为了要过滤一些页面必需要用户登录之后才能看&#xff0c;主页什么的可以随便看&#xff0c;一旦涉及到要发布或评论什么信息&#xff0c;就必须要过滤用户…

mybatis crud_MyBatis教程– CRUD操作和映射关系–第1部分

mybatis crudCRUD操作 MyBatis是一个SQL Mapper工具&#xff0c;与直接使用JDBC相比&#xff0c;它极大地简化了数据库编程。 步骤1&#xff1a;创建一个Maven项目并配置MyBatis依赖项。 <project xmlnshttp://maven.apache.org/POM/4.0.0 xmlns:xsihttp://www.w3.org/20…

C语言实现字符串匹配KMP算法

相信很多人&#xff08;包括自己&#xff09;初识KMP算法的时候始终是丈二和尚摸不着头脑&#xff0c;要么完全不知所云&#xff0c;要么看不懂书上的解释&#xff0c;要么自己觉得好像心里了解KMP算法的意思&#xff0c;却说不出个究竟&#xff0c;所谓知其然不知其所以然是也…

Linux问题分析或解决_samba无法连接

1. windows设置方面问题 问题&#xff1a;window能连接部分服务器的samba共享&#xff0c;一部分无法连接。报错如截图。 解决&#xff1a;前提---其他人连接都没有问题&#xff0c;发现有问题的连接服务器的电脑是win10&#xff0c;而win10可以连接到的服务器系统比较新&#…

Drools 7支持DMN(决策模型和表示法)

决策模型和表示法&#xff08;DMN&#xff09;规范是OMG&#xff08;对象管理小组&#xff09;提出的相对较新的标准&#xff0c;旨在为业务规则和业务决策做些什么。 BPMN&#xff08;它的兄弟规范&#xff09;用于业务流程&#xff1a;标准化表示法和执行语义&#xff0c;以…

Ubuntu系统下Python虚拟环境构建详解

在编程开发中&#xff0c;我们经常会利用不同版本的协助软件包&#xff0c;这样就导致一些软件不能兼容&#xff0c;为了解决这个问题呢&#xff0c;我们在儿引进Python虚拟环境&#xff0c;我们安装好虚拟环境之后&#xff0c;进一步激活它&#xff0c;然后在虚拟环境中运行不…

字符串匹配算法

1. 朴素算法 朴素算法是最简单的字符串匹配算法&#xff0c;也是人们接触得最多的字符串匹配算法。 2. Rabin-Karp算法 一个时间复杂度为O(&#xff08;N-M1)*M)的字符串匹配算法&#xff0c;即Rabin-Karp算法。Rabin-Karp算法的预处理时间是O(m)&#xff0c; 匹配时间OO(&…