好久没写博客了。 最近公司开了新项目,我负责的内容之一是系统的后端。具体项目内容我就不介绍了,但是用到的技术有些还是很有趣的,值得记录一下。今天介绍的就是其中一个:利用redis的pubsub订阅消息功能做消息队列。 对于这个功能本身,还是比较简单的。redis本身支持了publish/subscribe的功能,publish是广播消息,subscribe是订阅消息。服务端使用
转载 2024-06-09 16:36:24
38阅读
发送端:import pika import sys connection = pika.BlockingConnection(pika.ConnectionParameters(     host='localhost')) channel = connection.channel() cha
原创 2017-10-13 15:02:56
907阅读
【1】 - Hello World      哈哈,看到hello Word 是不是很熟悉,对,不管学什么请先从这个问候开始;       RabbitMQ消息代理。从本质上说,它接受来自生产者的信息,并将它们传递给消费者。在两者之间,它可以根据你给它的路由,缓冲规则进行传递消息。      &n
在现代分布式系统中,消息队列技术变得愈发重要,尤其是在微服务架构的实现中。RabbitMQ是一种广泛使用的开源消息代理,它能够帮助系统之间进行异步通信。在这篇博文中,我们将分享如何通过Java来订阅RabbitMQ消息的过程,重点阐述解决过程中遇到的挑战及我们的思考体会。 ## 初始技术痛点 在最开始的项目阶段,我们面临以下痛点: - **消息丢失**:在系统负载高峰期,消息可能会丢失,导致
实现公平队列公平队列:也就是能力强的消费者处理的消息多一点,能者多劳。也叫工作队列。如何实现公平消费:使用手动 ack 模式,也就是消费者手动发送消息告诉 mq 服务器端,消息消费完成,可以从队列删除该消息。主动拉去:消费者和MQ服务器端第一次建立连接的时候。 主动推送:消费者已经和MQ服务器端保持长连接了,只要生产者投递消息,MQ服务端会立即将消息转发给消费者。公平队列实现原理:MQ服务端没次只
RabbitMQ的工作原理下图是RabbitMQ的基本结构:生产者发送消息流程:1、生产者和Broker建立TCP连接。2、生产者和Broker建立通道。3、生产者通过通道消息发送给Broker,由Exchange将消息进行转发。4、Exchange将消息转发到指定的Queue(队列)消费者接收消息流程:1、消费者和Broker建立TCP连接2、消费者和Broker建立通道3、消费者监听指定的Qu
转载 2023-10-13 22:07:17
117阅读
前言上一篇对RabbitMQ的流程和相关的理论进行初步的概述,如果小伙伴之前对消息队列不是很了解,那么在看理论时会有些困惑,这里以消息模式为切入点,结合理论细节和代码实践的方式一起来学习。正文常用的模式有Simple、Work、Fanout、Direct、Topic、Headers,可以通过设置交换机类型和配置参数来实现各个模式;接下来就分别进行实操演示吧。以下演示都是通过管理员的账号进行。其实每
最近在做的一个项目对处理速度的要求很高,一般的数据库处理日志已经不能满足一般的日志记录需求。而且如果日志的操作失误会导致整个事务回滚,因此我把添加日志的操作放进了MQ来进行处理。最初是一个单线程的处理,但是因为单线程对执行的速度没有想象中的快,甚至还不如直接进行数据库插入,虽然解耦了日志代码但是速度降低。这里解决的方案是用到了,rabbitMQ的并发处理配置文件进行了相关的设置rabbitmq:
RabbitMQ推送消息步骤一:安装RabbitMQ 具体安装可以参照作者的另外2篇文章步骤二:打开Rabbit的管理界面,地址为IP:15672步骤三:在无登录账号的情况下,系统提供了默认的账号:guest ,密码:guest 注:guest可能出现登录不上的情况,这里系统是默认只能在本地登录guest这个账号 ,如需使用,需要去RabbitMQ配置文件配置。 配置流程:进入/usr/lib/r
转载 2024-05-29 00:39:48
245阅读
1. 认识RabbitMQ  1.1介绍RabbitMQRabbitMQ 是开源的高级消息队列协议(Advanced Message Queueing Protocol, AMQP) 的实现,用Erlang 语言编写,支持多种客户端。RabbitMQ是目前应用相当广泛的消息中间件(其他同类的消息处理中间件有ActiveMQ、Kafka等)。在企业级应用、微服务应用中,RabbitMQ担当着十分重要
 使用向队列注册消费者,当RabbitMQ服务端的队列接收到消息后推送给客户端,
原创 2023-05-26 06:01:30
61阅读
订阅模式:一个生产者发送的消息会被多个消费者获取。发布订阅模式下创建RabbitMq实例发布订阅模式queueName必须为空,要传入交换机exChangeName的名称,routingkey为空rabbitmq服务封装package rabbitmq import ( "fmt" "github.com/pkg/errors" "github.com/streadway/amqp" )
转载 9月前
88阅读
生产者(Publisher)发布消息流程:1、打开RabbitMQ连接;2、创建Channel通道;3、声名一个exchange交换机;4、生成一条消息;5、发布消息;6、关闭Channel通道;7、关闭RabbitMQ连接。消费者(Consumer)订阅和消费消息流程:1、打开RabbitMQ连接;2、创建Channel通道;3、声名一个exchange交换机;4、声名一个queue队列;5、将
原创 2021-01-07 10:08:14
508阅读
由图我们可以看出发布订阅的工作模式 1、一个生产者将消息发送给交换机 2、与交换机绑定的有多个队列,每个消费者监听自己的队列 3、生产者将消息发送给交换机,由交换机把消息转发到绑定次交换机的每个队列,每个绑定到交换机的队列都能接收到消息下面来模仿现实生活中的一个案例 案例:用户通知,当用户充值成功或转账完成系统通知用户,通知方式有短信、邮件多种方法 。1、首先创建生产者 p
保证消息不被重复消费(保证消息消费的幂等性)首先,消息重复处理一定在消费端。 1、定义消息ID ,之后根据ID判断消息是否进行过消费了 数据库方式:消息进行消费之前先通过数据库确认是不是已经消费过的消息。或消息在数据库中创建唯一键约束,重复消息不让落库。 Redis方式:可以使用Redis存下进行消费过的消息ID,从而防止重复消费。防止重复消费并不复杂,根据实际业务选择方式自定义方式最合适。保证消
转载 2024-01-28 00:28:54
64阅读
注: 代码demo 一、简单模式(单生产者单消费者):将消息直接发送到队列中,供消费者消费1.创建队列2.代码实现1)添加依赖<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-amqp</artifactI
转载 2024-09-26 10:37:19
672阅读
什么是路由呢?就和你们家里的路由器是一个概念,路由器就是把网络信号做转发、那么RabbitMQ中的路由,就是把消息做转发;RabbitMQ一共提供了四种路由:Ø Direct类型Ø Fanout类型Ø Topic类型Ø Header类型  01Direct类型的路由:上一篇文章中写的RabbitMQ的基本应用案例中使用的Exchange就
对于某些消息而言,我们有时候需要严格的知道消息是否已经被 consumer 监听消费处理了,即我们有一种消息确认机制来保证我们的消息是否已经真正的被消费处理。在 RabbitMQ 中,消息确认处理机制有三种:Auto - 自动、Manual - 手动、None - 无需确认,而确认机制需要 listener 实现 ChannelAwareMessageListener 接口,并重写其中的确认消费逻
消息队列(MQ)消息队列是典型的:生产者、消费者模型。生产者不断向消息队列中生产消息,消费者不断的从队列中获取消息。因为消息的生产和消费都是异步的,而且只关心消息的发送和接收,没有业务逻辑的侵入,这样就实现了生产者和消费者的解耦。MQ是消息通信的模型,并不是具体实现。现在实现MQ的有两种主流方式:AMQP、JMS。两者间的区别和联系:JMS是定义了统一的接口,来对消息操作进行统一;AMQP是通过规
转载 2024-06-05 12:43:07
366阅读
十年河东,十年河西,莫欺少年穷 学无止境,精益求精 上篇博客介绍了RabbitMQ的六种工作模式 R
原创 2022-09-28 16:18:47
94阅读
  • 1
  • 2
  • 3
  • 4
  • 5