mac下安装 rabbitmq 及 rabbitmq知识点

rabbitmq基本原理:

https://blog.csdn.net/yingfeng612/article/details/80150592

安装过程:

https://blog.csdn.net/u010046908/article/details/54773323

https://blog.csdn.net/u010442302/article/details/73189152

添加用户:

https://blog.csdn.net/kk185800961/article/details/55214474

学习流程:

https://blog.csdn.net/lmj623565791/article/details/37607165

 

知识点总结:

0.是否开启自动应答:

boolean ack = false ; //打开应答机制

channel.basicConsume(QUEUE_NAME, ack, consumer);

//另外需要在每次处理完成一个消息后,手动发送一次应答。

channel.basicAck(delivery.getEnvelope().getDeliveryTag(), false);

1.队列持久化的声明:boolean durable = true;

这样,当RabbitMQ退出或者异常退出,我们将不会丢失所有的队列和信息。

RabbitMQ不允许使用不同的参数重新定义一个队列,所以已经存在的队列,我们无法修改其属性。

如果不设置持久化,那么重启rabbitmq之后,消息队列将全部丢失。

2.分发消息的方式round-robin:

RabbitMQ会一个一个的发送信息给下一个消费者(consumer),而不考虑每个任务的时长等等,且是一次性分配,并非一个一个分配。平均的每个消费者将会获得相等数量的消息。

3.公平转发(Fair dispatch):

目前的消息转发机制(Round-robin)并非是我们想要的。例如,这样一种情况,对于两个消费者,有一系列的任务,奇数任务特别耗时,而偶数任务却很轻松,这样造成一个消费者一直繁忙,另一个消费者却很快执行完任务后等待。

为了解决这样的问题,我们可以使用basicQos方法,传递参数为prefetchCount=1。

这样告诉RabbitMQ不要在同一时间给一个消费者超过一条消息。换句话说,只有在消费者空闲的时候会发送下一条信息。

当消费者不忙时进行转发。且这种模式下支持动态增加消费者,因为消息并没有发送出去,动态增加了消费者马上投入工作。而默认的转发机制会造成,即使动态增加了消费者,此时的消息已经分配完毕,无法立即加入工作,即使有很多未完成的任务。

4.没有设置消息处理时长,如何控制一个进程kill掉之后,它上面正在处理的消息会进入其他进程,是因为rabbitmq可以监控到连接断开吗?

答:这种机制并没有超时时间这么一说,RabbitMQ只有在消费者连接断开时重新转发此信息。如果消费者处理一个信息需要耗费特别特别长的时间是允许的。

消息应答默认是打开的。

5.RabbitMQ消息模型的核心理念是生产者永远不会直接发送任何消息给队列,一般的情况生产者甚至不知道消息应该发送到哪些队列。

相反的,生产者只能发送消息给转发器(Exchange)。转发器是非常简单的,一边接收从生产者发来的消息,另一边把消息推送到队列中。转发器必须清楚的知道消息如何处理它收到的每一条消息。是否应该追加到一个指定的队列?是否应该追加到多个队列?或者是否应该丢弃?这些规则通过转发器的类型进行定义。

下面列出一些可用的转发器类型:

Direct

Topic

Headers

Fanout

Fanout是广播式的,广播式也是实时的,过时之后再打开消费者是无法收到消息的。广播式类似于观察者模式(订阅消息);

且这种方式是不存在rounting key的,对列直接绑定到Exchange上。

 

Direct类型的转发器背后的路由转发算法很简单:消息会被推送至绑定键(binding key)和消息发布附带的选择键(routing key)完全匹配的队列。

也可以进行多重绑定,如下,一个相同的Exchange 和 routing key,发送到不同的队列,但是接收到的信息是一样的。

 

使用一个绑定键(binding key)绑定多个队列是完全合法的。如上图,一个附带选择键(routing key)的消息将会被转发到Q1和Q2。

 

主题转发(Topic Exchange)

发往主题类型的转发器的消息不能随意的设置选择键(routing_key),必须是由点隔开的一系列的标识符组成,

一个附带特殊的选择键将会被转发到绑定键与之匹配的队列中。

关于绑定键有两种特殊的情况:

*可以匹配一个标识符。

#可以匹配0个或多个标识符。

主题类型的转发器非常强大,可以实现其他类型的转发器。

当一个队列与绑定键#绑定,将会收到所有的消息,类似fanout类型转发器。

当绑定键中不包含任何#与*时,类似direct类型转发器。

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值