共计 917 个字符,预计需要花费 3 分钟才能阅读完成。
rabbitmq 六种模式
发送音讯的程序就是生产者
队列就代表一个邮箱。
消费者期待从队列接管音讯
ConnectionFactory f = new ConnectionFactory();
f.setHost("192.168.64.140");
f.setPort(5672);// 可选,5672 是默认端口
f.setUsername("admin");
f.setPassword("admin");
工作模式
一个生产者,两个消费者
rabbitmq 在所有消费者中轮询散发音讯, 把音讯平均地发送给所有消费者
正当的散发
abbitmq 会一次把多个音讯分发给消费者, 这样可能造成有的消费者十分忙碌, 而其它消费者闲暇. 而 rabbitmq 对此无所不知, 依然会平均的散发音讯
咱们能够应用 basicQos(1)
办法, 这通知 rabbitmq 一次只向消费者发送一条音讯, 在返回确认回执前, 不要向消费者发送新音讯. 而是把音讯发给下一个闲暇的消费者
音讯长久化
当 rabbitmq 敞开时, 咱们队列中的音讯依然会失落, 除非明确要求它不要失落数据
要求 rabbitmq 不失落数据要做如下两点: 把队列和音讯都设置为可长久化(durable)
队列设置为可长久化, 能够在定义队列时指定参数 durable 为 true
第二个参数是长久化参数 durable
ch.queueDeclare(“helloworld”, true, false, false, null);
公布和订阅模式
咱们将做一些齐全不同的事件——咱们将向多个消费者传递同一条音讯。这种模式称为“公布 / 订阅”。
Exchanges 交换机
RabbitMQ 消息传递模型的核心思想是,生产者永远不会将任何音讯间接发送到队列。实际上,通常生产者甚至不晓得音讯是否会被传递到任何队列。
有几种可用的替换类型:direct、topic、header 和 fanout。咱们将关注最初一个——fanout。让咱们创立一个这种类型的交换机,并称之为 logs: ch.exchangeDeclare("logs", "fanout");
主动生成队列名
非长久, 独占, 主动删除
String queueName = ch.queueDeclare().getQueue();
4. 路由模式