RabbitMQ
文章平均质量分 53
rabbitmq专栏
luzaichun
这个作者很懒,什么都没留下…
展开
-
Springboot中使用ConfirmCallback和ReturnCallback
注意:在需要使用消息的return机制时候,mandatory参数必须设置为true新版本开启消息的confirm配置publisher-confirms已经过时,改为使用publisher-confirm-type参数设置(correlated:开启;NONE:关闭)1.配置文件和核心依赖spring: rabbitmq: username: guest password: guest virtual-host: / addresses: 192.168.3原创 2021-01-02 19:57:16 · 5624 阅读 · 7 评论 -
Springboot中交换机队列的声明及绑定
配置文件和核心依赖 <!--springboot版本2.3.7.RELEASE--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-amqp</artifactId> </dependency>spring: rabbitmq: username: g.原创 2021-01-02 17:02:40 · 1340 阅读 · 1 评论 -
Spring的RabbitAdmin使用
RabbitAdmin类,可以让我们能很方便的操作队列,交换机。如:声明交换机,声明队列,绑定,清除消息,发送消息。而且可以注入到Spring的容器中,我们使用的时候直接@Autowired就可以使用。使用方式:配置文件和依赖tips:高版本spring-boot-starter-amqp我在测试时候报错,所以用了1.5版本springboot<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://mave原创 2021-01-01 01:17:17 · 4449 阅读 · 3 评论 -
死信队列
死信队列:当消息在一个队列中变成死信之后,它能被重新pushlish到另一个exchange,这个exchange就是死信队列(DXL)。消息变成死信几种情况:消息被拒绝nack,并且requeue=false不重回队列消息TTL过期队列达到最大长度死信队列其实也是一个正常exchange,也是需要和队列绑定使用。只是其他队列在发生死信的时候,可以指定死信消息重新push到达这个死信exchange。给一个正常业务队列,设置它的死信队列方式,是在声明queue的时候在arguments参数里原创 2020-12-29 22:38:57 · 1087 阅读 · 0 评论 -
消息TTL
消息的TTL指的是消息的存活时间,我们可以通过设置消息的TTL或者队列的TTL来实现。消息的TTL,对于设置了过期时间属性(expiration)的消息,消息如果在过期时间内没被消费,会过期队列的TTL,对于设置了过期时间属性(x-message-ttl)的队列,所有路由到这个队列的消息,都会设置上这个过期时间用途:消息的TTL一般可以用作延迟消息,定时任务等。演示代码:只需要生产端+控制台就可以验证消息的TTL1.如果要验证TTL队列,请给队列设置如下属性。queueArgument是声原创 2020-12-27 21:57:11 · 617 阅读 · 0 评论 -
消费端ack和重回队列
MQ的消费端,线上环境里都是用的手工方式进行ACK和NACK。ACK当消息正常消费,给MQ的Broker一个应答,表示消息消费完成,业务处理正常NACK当消费端消费消息,业务异常了,我们可以NACK,加上重回队列,消息会重新投递,如果多次重投后还是失败就进行补偿策略。消费端的重回队列:没有处理成功的消息,执行NACK,并且设置消息重新返回到MQ,然后可以重新投递。(重回队列是放到队列尾部)ack:channel.basicAck()nack:channel.basicNack()tips:只有原创 2020-12-24 23:46:53 · 605 阅读 · 0 评论 -
MQ消费端限流
MQ三大主要功能:削峰、异步、解耦,这章主要是讲削峰,可以通过MQ消费端限流来实现。消费端限流主要是为了保证消费端的服务稳定性,防止超过消费端负载,将服务打挂,卡死。rabbitmq提供了一种qos(服务质量保证)功能,即在非自动确认消息的前提下,如果一定数目的消息(给channel或者consume设置Qos值)未被确认前,不进行消费新消息。使用:1.在消费端,通过channel.basicQos方法进行设置2.关闭自动ACK测试生产端:package com.vivo.demo1.co原创 2020-12-23 23:12:44 · 2274 阅读 · 0 评论 -
消费端自定义监听
之前的例子里,我们消费者监听消费消息都是下面这样写的,一个while死循环,然后consumer.nextDelivery()一个个获取消息 。(初学者傻傻方式,哈哈)后面我们就可以通过自定义消费监听者,来实现消息的消费了步骤:创建一个自定义的消息处理类(如MyConsumer类)继承DefaultConsumer重写handleDelivery方法代码:生产者package com.vivo.demo1.consumer;import com.rabbitmq.client.*;原创 2020-12-23 00:16:46 · 249 阅读 · 0 评论 -
消息return机制
return消息机制:用于处理一些不可路由的消息。message 从 exchange->queue 投递失败则会返回一个 returnCallback 。我们将利用这两个 callback 控制消息的最终一致性和部分纠错能力。例如:消息发送到exchange后,由于指定的路由key路由不到queue,这个时候可以用return机制监听这些不可达消息。使用:在channel上添加return消息的监听channel.addReturnListener在调用channel.basicPu原创 2020-12-22 23:19:58 · 371 阅读 · 0 评论 -
消息confirm机制
实现消息的confirm:在channel上开启确认模式:channel.confirm原创 2020-12-20 23:19:42 · 1274 阅读 · 0 评论 -
消息生产端的可靠性投递方案
生产端的可靠性投递:保证生产端消息成功发出保证mq节点成功接收发送端收到MQ的确认应答完善的消息补偿机制方案一:消息落库,对消息状态进行打标以订单模型为例 (消息状态 0:发送中;1:发送成功;2:消息发送失败)订单消息先落库,并且 要发送的消息也落库,例如落到消息日志表生产者发送消息MQ Broker如果收到这个消息,会给生产者发送一个确认,确认收到这个消息(应答)生产者需要写一个监听,监听上面的应答。再根据这个应答去操作日志记录表,将消息状态改为1(成功)定时任务定时去原创 2020-12-20 15:43:51 · 175 阅读 · 0 评论 -
message的properties
这一期主要讲的是,我们MQ生产者在发送消息的时候设置的properties。我们在使用channel.basicPublish()方法发送消息的时候,可以指定几个参数:交换机名称-exchange消息的路由键-routingKey消息属性-properties消息体-body消息的propertiest通过创建一个AMQP.BasicProperties的对象来配置。一下是所有可以设置的属性headers:我们有如果自定义的参数,可以封装成一个map,然后放到headers属性里e原创 2020-12-17 21:58:58 · 3104 阅读 · 0 评论 -
Exchange交换机-fanout模式
fanout模式:广播模式,不关心routingKey,只要和fanout类型交换机绑定的 队列,在交换机接收到消息时,会将消息转发到所有与该交换机绑定的队列消费者1:package com.vivo.demo1.fanout;import com.rabbitmq.client.*;import java.io.IOException;import java.util.concurrent.TimeoutException;/** * @author:luzaichun * @D原创 2020-12-16 21:30:48 · 589 阅读 · 0 评论 -
Exchange交换机-topic模式
topic模式:exchange将routingKey和某个topic进行模糊匹配,队列需要绑定一个topic*:代表匹配一个单词#:代表匹配多个或零个单词以上图为例:Q1队列和交换机x绑定密钥为*.orange.*;Q2队列和交换机x绑定密钥为*.*.rabbit和lazy.#如果我们发送消息的routingKey为 quick.orange.rabbit那么它将被路由到Q1,Q2连个队列(匹配*.orange.*和*.*.rabbit)lazy.orange.elephant那么它也原创 2020-12-15 23:47:32 · 425 阅读 · 0 评论 -
Exchange交换机-direct模式
消息的整个流转过程:producer发送一条消息到exchange通过匹配routingKey将消息路由到指定队列(发送消息时设置的routingKey和exchange和队列绑定时候的bindingKey去路由)consumer端监听队列,消费消息Exchange:交换机负责接收消息,并根据路由key将消息路由到指定队列交换机的属性:name-交换机名称type-交换机类型direct(直连)、topic(主题)、fanout(广播)、headersdurability-是否.原创 2020-12-13 22:13:53 · 490 阅读 · 0 评论 -
RabbitMQ快速开始
最近工作太忙,每天回到家都10点多,11点多,都没精力学习了,没精力写博客,后面希望能好一点,能抽出一些时间来自我提升。就决定从rabbitmq开始,系统学习一波。RabbitMQ快速开始,通过原生API快速创建自己第一个demo,实现消息的生产和消费1. 快速创建一个工程并引入相关依赖tips:我这边是直接创建一个springboot工程,因为idea创建一个springboot工程十分方便<?xml version="1.0" encoding="UTF-8"?><p.原创 2020-12-13 16:12:47 · 174 阅读 · 0 评论 -
rabbitmq管控台部分命令
用户相关命令添加用户rabbitmqctl add_user {username} {password}列出所有用户rabbitmqctl list_users删除一个用户rabbitmqctl delete_user {username}修改密码rabbitmqctl change_password {username} {newpassword}列出用户权限rabbitmqctl list_user_permissions {username}设置用户权限rabbitm原创 2020-08-16 17:23:31 · 128 阅读 · 0 评论 -
rabbitmq快速安装-RPM方式
依赖包下载一、安装1.安装erlang包rpm -ivh erlang-18.3-1.el7.centos.x86_64.rpmtips:如果安装报错,可能是当前系统环境没有安装gcc环境,可以使用yum快速安装gccyum install build-essential openssl openssl-devel unixODBC unixODBC-devel make gcc gcc-c++ kernel-devel m4 ncurses-devel tk tc xz2.安装so原创 2020-08-16 17:00:19 · 563 阅读 · 0 评论