Spring AMQP

RabbitMQ的5种核心消息模式都不懂,也敢说会用消息队列

為{幸葍}努か 提交于 2020-12-01 19:31:43
摘要 以前看过的关于RabbitMQ核心消息模式的文章都是基于JavaAPI的,最近看了下官方文档,发现这些核心消息模式都可以通过Spring AMQP来实现。于是总结了下RabbitMQ的实用技巧,包括RabbitMQ在Windows和Linux下的安装、5种核心消息模式的Spring AMQP实现,相信对于想要学习和回顾RabbitMQ的朋友都会有所帮助。 简介 RabbitMQ是最受欢迎的开源消息中间件之一,在全球范围内被广泛应用。RabbitMQ是轻量级且易于部署的,能支持多种消息协议。RabbitMQ可以部署在分布式系统中,以满足大规模、高可用的要求。 相关概念 我们先来了解下RabbitMQ中的相关概念,这里以5种消息模式中的路由模式为例。 安装及配置 接下来我们介绍下RabbitMQ的安装和配置,提供Windows和Linux两种安装方式。 Windows下的安装 安装Erlang,下载地址:erlang.org/download/ot… 安装RabbitMQ,下载地址:dl.bintray.com/rabbitmq/al… 安装完成后,进入RabbitMQ安装目录下的sbin目录; 在地址栏输入cmd并回车启动命令行,然后输入以下命令启动管理功能。 rabbitmq-plugins enable rabbitmq_management Linux下的安装

RabbitMQ怎么在工程实践中具体落地

半腔热情 提交于 2020-10-24 14:15:58
消息中间件,我一直认为是对开发人员来说非常重要的一部分知识,但很少有人能把它精通。多数人都是为了面试或者是应付工作,学了很多遍,学了一些通用的零散的理论,而实际使用中,只会最基本的几个配置、几个命令。学了像是没学一样。时间久了,甚至有学它没什么用的感觉。 其实理解消息中间件,对理解分布式非常有帮助。消息中间件学好了,甚至可以改造成分布式事务框架。 我的好朋友 Jacquie 跟我说,同学们处在一个矛盾的情形下,一方面觉得好多课程里用到了MQ,都讲了几节,都学烂了,不想听了。另一方面,在专门讲MQ的专题课内,又觉得讲的理论化、脱离实际,用不到自己的工作中去。我们俩一合计,一起策划了 这门课 。 这就是我们俩的初心。 课程上线后,作为一个“长尾却刚需的产品”,原本只是想默默打磨质量,没想过一炮走红,很匠人的心态去做。 没想到却因为广受好评成为同期中 非常有个性的一门课程 ,所以Jacquie她又代表慕课网,找到我来回访。 有幸受访,我也又有了许多新收获。希望也可以对看文章的你有所帮助~ Jacquie: 短短一月,还跨越了十一长~~~假,课程却无论在课程评论区还是在QQ群内,都广受好评,而且都是“眼前一亮”“wow~ ⊙o⊙”的感觉,我来从几位同学的好评的角度,提出一些问题,我们一起做个复盘吧~ Moody: 好的 Jacquie:最初是怎么想到使用项目迭代的方式的

Spring AMQP中使用拦截器

馋奶兔 提交于 2020-08-14 16:17:00
一旦将template.convertAndSend调用,在将消息传递到RabbitMQ之前,是否有一种方法可以拦截消息. 还有什么方法可以在到达处理程序之前拦截消息? 我可以使用发布者的PostProcessor处理消息,但更喜欢使用拦截器. public class TestPostProcessor implements MessagePostProcessor { @Autowired Tracer defaultTracer; @Override public Message postProcessMessage(Message message) throws AmqpException { //..... //.... return message; } } 复制代码 有什么建议么? 最佳答案 MessagePostProcessor是拦截器的一种形式. 有两种方法可以调用一种-使用以MPP作为参数的重载convertAndSend()方法之一,或使用setBeforePublishPostPostors()将一个或多个添加到RabbitTemplate中. 您还可以使用setAfterReceivePostProcessors()截获收到的消息,该方法在从receive()方法返回收到的消息之前调用.

rabbitmq消息接收的可靠性机制

寵の児 提交于 2020-08-13 17:05:53
消费端的两种处理机制: 两种机制的区别, 第一种是在消费端出现异常, 系统执行的, 如果多次重试失败, 则可以抛出指定异常拒绝该消息(等同与reject)或者将消息发送到指定队列; 第二种ack机制必须要内部catch住消费者的异常, 手动的进行ack或者nack给rabbitmq , 然后rabbitmq根据配置重新发送消息或者直接舍弃该消息 1. spring.rabbitmq.listener.retry配置的重发是在消费端应用内处理的,不是rabbitqq重发. 因为retry是消费端内部处理的,包括异常也是内部处理,对于rabbitmq是不知道的 2.消息ack a. 返回ack则表明消息被处理, rabbitmq删除消息, b. nack或者reject并且requeue=true则rabbitmq重新发送该消息,requeue=false则讲消息丢弃或放入私信队列 nack和reject区别, 前者可以批量拒绝 消息, reject只能单条消息拒绝 c. 如果rabbitmq发出的消息一直得不到服务端的相应, 则在 rabbitmq断开,连接后会自动重新推送(不管是网络问题还是宕机) 消费端应用重启,消息会自动重新推送 关于retry spring.rabbitmq.listener.simple. retry .max-attempts= 5 最大重试次数

SpringAMQP 消息适配器

给你一囗甜甜゛ 提交于 2020-08-11 14:43:44
MessageListenerAdapter 即消息监听适配器 这一节,我们先写一下代码,再总结 MessageListenerAdapter 的使用 代码示例: 代码地址: https://github.com/hmilyos/rabbitmqdemo.git rabbitmq-api 项目下 复制代码 1.简单使用默认方法 修改上一节 SpringAMQP 消息容器 - SimpleMessageListenerContainer 的 RabbitMQConfig 的 messageContainer 方法 复制代码 @Bean //connectionFactory 也是要和最上面方法名保持一致 public SimpleMessageListenerContainer messageContainer(ConnectionFactory connectionFactory) { SimpleMessageListenerContainer container = new SimpleMessageListenerContainer(connectionFactory); container.setQueues(queue001(), queue002(), queue003()); //监听的队列 container.setConcurrentConsumers(1); /

花了3天总结的RabbitMQ实用技巧

微笑、不失礼 提交于 2020-08-08 17:58:27
以前看过的关于RabbitMQ核心消息模式的文章都是基于Java API的,最近看了下官方文档,发现这些核心消息模式都可以通过Spring AMQP来实现。于是总结了下RabbitMQ的实用技巧,包括RabbitMQ在Windows和Linux下的安装、5种核心消息模式的Spring AMQP实现,相信对于想要学习和回顾RabbitMQ的朋友都会有所帮助。 简介 RabbitMQ是最受欢迎的开源消息中间件之一,在全球范围内被广泛应用。RabbitMQ是轻量级且易于部署的,能支持多种消息协议。RabbitMQ可以部署在分布式系统中,以满足大规模、高可用的要求。 相关概念 我们先来了解下RabbitMQ中的相关概念,这里以5种消息模式中的路由模式为例。 安装及配置 接下来我们介绍下RabbitMQ的安装和配置,提供Windows和Linux两种安装方式。 Windows下的安装 安装Erlang,下载地址:http://erlang.org/download/otp_win64_21.3.exe 安装RabbitMQ,下载地址:https://dl.bintray.com/rabbitmq/all/rabbitmq-server/3.7.14/rabbitmq-server-3.7.14.exe 安装完成后,进入RabbitMQ安装目录下的sbin目录;

1.RabbitMQ工作模型与基本原理

*爱你&永不变心* 提交于 2020-04-27 19:31:53
1、了解 MQ 的本质和 RabbitMQ 的特性; 2、掌握 RabbitMQ 的 Java API 编程和 Spring 集成 RabbitMQ 1. MQ 了解 1.1. 消息队列简介 1.1.1.MQ 的诞生历程 我们要去用 MQ,先来了解一下 MQ 是怎么诞生的,这样对于它解决了什么问题理 解会更加深刻。世界上第一个 MQ 叫什么名字,是什么时候诞生的? 1983 年的时候,有个在 MIT 工作的印度小伙突发奇想,以前我们的软件相互通信, 都是点对点的,而且要实现相同的协议,能不能有一种专门用来通信的中间件,就像主 板(BUS)一样,把不同的软件集成起来呢?于是他搞了一家公司(Teknekron),开发 了世界上第一个消息队列软件 The Information Bus(TIB)。最开始的时候,它被高盛这 些公司用在金融交易里面。因为 TIB 实现了发布订阅(Publish/Subscribe)模型,信息的 生产者和消费者可以完全解耦,这个特性引起了电信行业特别是新闻机构的注意。1994 年路透社收购了 Teknekron。 TIB 的成功马上引起了业界大佬 IBM 的注意,他们研发了自己的 IBM MQ(IBM Wesphere)。后面微软也加入了这场战斗,研发了 MSMQ。这个时候,每个厂商的产 品是孤立的,大家都有自己的技术壁垒。比如一个应用订阅了 IBM MQ

rabbitmq生产者的消息确认

荒凉一梦 提交于 2020-04-27 08:49:46
通过Publisher Confirms and Returns机制,生产者可以判断消息是否发送到了exchange及queue,而通过消费者确认机制,Rabbitmq可以决定是否重发消息给消费者,以保证消息被处理。 1.什么是Publisher Confirms and Returns? Delivery processing acknowledgements from consumers to RabbitMQ are known as acknowledgements in AMQP 0-9-1 parlance; broker acknowledgements to publishers are a protocol extension called publisher confirms. 地址: http://www.rabbitmq.com/confirms.html 根据RabbitMq官网定义,rabbitmq代理(broker)对发布者(publishers)的确认被称作发布者确认(publisher confirms),这种机制是Rabbitmq对标准Amqp协议的扩展。因此通过这种机制可以确认消息是否发送给了目标。 2.如何通过Spring amqp来使用Publisher Confirms and Returns机制? Confirmed and

springboot项目中使用rabbitmq开发应用

谁说我不能喝 提交于 2020-03-21 01:09:44
3 月,跳不动了?>>> AMQP介绍 AMQP(Advanced Message Queuing Protocol,高级消息队列协议)是一个进程间传递异步消息的网络协议。 Exchange有Direct、Fanout、Topic、Headers,最常用的是Direct、Fanout、Topic三种类型。 “生产/消费”消息模型 生产者发送消息到broker server(RabbitMQ)。在Broker内部,用户创建Exchange/Queue, 通过Binding规则将两者联系在一起。Exchange分发消息,根据类型/binding的不同分发策略有区别。 消息最后来到Queue中,等待消费者取走。 AMQP messaging 中的基本概念 Broker: 接收和分发消息的应用,RabbitMQ Server就是Message Broker。 Virtual host: 出于多租户和安全因素设计的,把AMQP的基本组件划分到一个虚拟的分组中,类似于网络中的namespace概念。当多个不同的用户使用同一个RabbitMQ server提供的服务时,可以划分出多个vhost,每个用户在自己的vhost创建exchange/queue等。 Connection: publisher/consumer和broker之间的TCP连接。断开连接的操作只会在client端进行

一丶RabbitMQ初识与安装

六眼飞鱼酱① 提交于 2020-03-18 11:21:59
某厂面试归来,发现自己落伍了!>>> 一.RabbitMQ是什么? RabbitMQ是一个开源消息代理和队列服务器,用来通过普通的协议在完全不同的应用之间共享数据,RabbitMQ使用的是Erlang语言编写的,并且是基于AMQP协议的。 二.为什么使用RabbitMQ 1.开源,性能优秀,性能稳定保障 2.提供可靠的消息投递(confirm),返回模式(return) 3.与SpringAMQP完美整合,API丰富 4.集群模式丰富,表达式配置,HA模式,镜像队列模型 5.保证数据不掉失可靠,可用性 三.RabbitMQ高性能的原因? 1.erlang最初用于交换机架构模式,使得rabbitmq在broker之间进行数据交互性能非常优秀 2.erlang的优点:有着和原生的socket一样的延迟 四.linux安装 准备一台Linux虚拟机,老师的机器是Linux7(CentOS 7);配置最好再2G内存以上哦,然后使用Xshell登录上去即可,注意准备工作非常重要哦。首先我们确认你的虚拟机是否能够和本机Ping通,检查虚拟机和本机的网络、防火墙等基础设施。 进入安装: ## 1. 首先在Linux上进行一些软件的准备工作,yum下来一些基础的软件包 yum install build-essential openssl openssl-devel unixODBC