当前位置:网站首页>11.9

11.9

2020-11-09 22:19:25 木木

rabbitmq六种模式

image.png
image.png
发送消息的程序就是生产者
队列就代表一个邮箱。
消费者等待从队列接收消息
ConnectionFactory f = new ConnectionFactory();

    f.setHost("192.168.64.140");
    f.setPort(5672);//可选,5672是默认端口
    f.setUsername("admin");
    f.setPassword("admin");

工作模式

image.png
image.png
一个生产者,两个消费者
rabbitmq在所有消费者中轮询分发消息,把消息均匀地发送给所有消费者

合理的分发

abbitmq会一次把多个消息分发给消费者, 这样可能造成有的消费者非常繁忙, 而其它消费者空闲. 而rabbitmq对此一无所知, 仍然会均匀的分发消息

我们可以使用 basicQos(1) 方法, 这告诉rabbitmq一次只向消费者发送一条消息, 在返回确认回执前, 不要向消费者发送新消息. 而是把消息发给下一个空闲的消费者

消息持久化

当rabbitmq关闭时, 我们队列中的消息仍然会丢失, 除非明确要求它不要丢失数据

要求rabbitmq不丢失数据要做如下两点: 把队列和消息都设置为可持久化(durable)

队列设置为可持久化, 可以在定义队列时指定参数durable为true

第二个参数是持久化参数durable

ch.queueDeclare("helloworld", true, false, false, null);

发布和订阅模式

image.png
image.png
我们将做一些完全不同的事情——我们将向多个消费者传递同一条消息。这种模式称为“发布/订阅”。

Exchanges交换机

RabbitMQ消息传递模型的核心思想是,生产者永远不会将任何消息直接发送到队列。实际上,通常生产者甚至不知道消息是否会被传递到任何队列。
有几种可用的交换类型:direct、topic、header和fanout。我们将关注最后一个——fanout。让我们创建一个这种类型的交换机,并称之为 logs: ch.exchangeDeclare("logs", "fanout");

自动生成队列名
非持久,独占,自动删除
String queueName = ch.queueDeclare().getQueue();

4.路由模式

image.png
image.png

版权声明
本文为[木木]所创,转载请带上原文链接,感谢
https://segmentfault.com/a/1190000037778845