java能长高吗_RabbitMQ下,今天又长高了点!!!

昨日回顾:

work模式:能解决能者多劳——把ack的自动改为手动,明确一次只拿1条消息 basicQos(1)

如果没有明确一次只拿一条消息,哪么没有消费的消息会堆积在消费端。

发布订阅模式:一条消息北多条消费者消费。使用了交换机,一条消息可以同时被绑定在交换机上的队列接收

发布订阅模式:

一条消息被多个消费者。使用了交换机,一条消息发给交换机后,交换机把消息同时发给所有的队列,此时队列上绑定的消费者就可以拿到消息。

路由模式:

一条消息被多个消费者消费使用了交换机,消息发送到交换机上后,交换机通过routing-key来找到对应的队列(不是所有的多队列)此时对应的队列上监听的消费者就能拿到消息。

通配符模式:

一条消息被多个消费者消费使用了交换机,基于路由模式在创建队列和交换机的映射关系时,在routing-key上使用通配符。

*:当前层次的问题,如果在关系时使用了这样的key:qf.java.*,那么qf.java.orangeh或者qf.java.banana都可以命中,但是qf.java.orange.red就不能命中

#:时无层次级当前层次的问题,如果在关系时使用了这样的key:qf.java.*,那么qf.java.orangeh或者qf.java.banana都可以命中,但是qf.java.orange.red都能命中:

十:使用MQ来改造项目:

比如要做的事情:下订单:要发生的事情有:

1):在订单数据库order里添加一条订单记录——在订单库+x

2)减库存——在库存库-1

3)加积分——在积分库加xxx

电商:用异步的方式,在服务器上逐一的去完成,

十一:消息队列的高级用法

1):消息的持久化:

在发送消息时,可以设置一个bassicProperties对象,在对象中封装一些配置信息。

.deliverModel(2) 2标识持久化消息,服务重启后,消息还在

.expretion(“10000")表示消息在10秒钟没有消费就会过期

2):如何在消费端做限流:

为实现限流在消费端设置一个baisicQos(5) ,限流算法:令牌桶算法,漏桶算法。

3)Comfilm_Listenner消息队列模式

上半场ack与下半场ack的区别:

4):Ack与Nack和Rejest的区别

4.1Ack对于明确要消费的消息。可以通过Ack告知mq,mq就会发送一条消息给消息给消费者。

4.2Nack告知mq这样的消息我不处理,丢弃掉,此消息会变为死信。

channel.basicNack(envelope.getDeliveryTag(),false, false)

第一个参数:envelope.getDeliveryTage表示消息的唯一标识ID,是一个正整数,是mq的设置

第二个参数:是否批量处理,可以提高效率:

第三个参数:是否重回队列的话,那么下一次还会继续消费这条消息,所以一般情况下不会重回队列:

3)Reject

reject与nack的用法相同,但是与nack只有一个区别,nack一次可以拒绝多条消息,但是reject一次只能拒绝一条消息

4)Return_Listenner不可达时因该咋样处理

当发消息时交换机不在,或者队列不在,或者Routing-key错误,那么相应的Renting-Listenner就可以工作了,注意,使用这个功能时,要把basicpublish中使用 mandatory开启

5)死信队列:

如果设置了死信队列,当以一个普通的消息成为死信队列后 于是这样的消息就会被自动publish到死信队列中。

5.1 消息被拒签就不会再回到队列;

5.2消息过期了

5.3超过了队列的长度,消息就会成为死信

通过消息的过期成为死信,死信队列很容易就会做出一个延迟队列的效果。

1.延迟队列:

项目:下单30分钟如果没有付款,该订单就会关闭

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值