RabbitMQ 第3章

连接服务端需要 指定 

1 IP地址  2  端口号  3 用户名  4 密码

即可连接

线程间channel不可共享    会出现线程安全问题

使用channel时  如果其已经关闭  会抛出  异常

客户端catch此异常即可

并同时捕获  IO 以及 Socket异常  防止Connection意外关闭

通过channel声明交换机以及队列

声明交换机传入的 参数:

扫描二维码关注公众号,回复: 5639964 查看本文章

1交换机名称

2交换机类型

3是否持久化

4是否设置自动删除:当无队列与此交换机绑定时会自动删除此交换机

5是否为内置交换机:为内置交换机   只能通过交换机路由到此交换机 而不能直接发送消息到此交换机

6 其他结构化参数

声明队列

1 队列名称

2 是否持久化

3 是否排他   同一名称的队列只能被一个connection所拥有

4 是否自动删除   所有与这个队列相连接的消费者均断开连接

将交换机与队列进行绑定:

1 队列名称

2 交换机名称

3 绑定队列和交换机的路由键 RoutingKey

4 绑定的一些参数

将交换机与交换机进行绑定:

生产者将消息发送到交换机source中,交换机source根据路由键找到与其匹配的另一个交换机,由该交换机路由到其绑定的队列中。

何时创建队列:

在上线前评估好流量,预测出需要使用的队列的情况。

发送消息:

投递模式设置为2:消息持久化到硬盘中

headers

过期时间

交换机名称

消费消息:

消费模式分两种:

1 推模式  采用Basic.Consume 进行消费

2 拉模式  调用Basic.Get 进行消费

推模式:采用持续订阅的方式来消费消息,接受消息通过实现Consumer接口或者继承DefaultConsumer类来实现

注意点:

自动ack设置为false,在消息消费完成后调用ack。以防止消息丢失问题

basicConsume中的参数:

1 队列名称

2 是否自动ack

3 消费者标签,用于区分多个消费者

4 noLocal  为true表示不能将生产消费消息都在同一台机器上

5 是否排他

6 消费者的回调函数,用于消费消息。如实现接口,或继承类后实现的方法。

7 其他参数

拉模式:不建议使用,使用推模式对MQ的吞吐量更友好

消费者端的确认与拒绝

MQ需要收到消费者ack信号后才把对应信号打上删除标记,之后进行删除(定时任务惰性删除?)

MQ队列中的消息分为两部分:

1 等待投递的消息

2 已经投递给消费者的消息,但未收到消费者ack的消息

如MQ未收到消费者ack信号,且消费者已经断开连接->MQ会安排该消息重新进入队列,重新走投递流程

如消费者拒绝消息 

且requeue为true,则该消息重新入队

如requeue为false,则该消息会从队列中移除

Basic.Reject  一次拒绝一条消息

Basic.Nack 可以批量拒绝消息

上述两种拒绝方法中的requeue设置为false时,会启用死信队列功能

猜你喜欢

转载自blog.csdn.net/csdn_9527666/article/details/88564038