Pub/Sub订阅模式
P:生产者,也就是要发送消息的程序,但是不再发送到队列中,而是发给X (交换机)
C:消费者,消息的接收者,会-直等待消息到来
Queue: 消息队列,接收消息、缓存消息
Exchange: 交换机(X) 。- -方面,接收生产者发送的消息。另- -方面,知道如何处理消息,例如递交给某个特别队列、递交给所有队列、或是将消息丢弃。到底如何操作,取决于Exchange的类型。Exchange有 常见以下3种类型:
-
Fanout: 广播将消息交给所有绑定到交换机的队列
-
Direct: 定向,把消息交给符合指定routing key的队列
-
Topic: 通配符,把消息交给符合routing pattern (路由模式)的队列
Exchange (交换机)只负责转发消息,不具备存储消息的能力,因此如果没有任何队列与Exchange绑定,或者没有符合路由规则的队列,那么消息将会丢失。
代码实现
生产者:
package com.sx.producer;
import com.rabbitmq.client.BuiltinExchangeType;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
import java.io.IOException;
import java.util.concurrent.TimeoutException;
/**
* 发送消息
*/
public class Producer_PubSub {
public static void main(String[] args) throws IOException, TimeoutException {
ConnectionFactory factory = new ConnectionFactory();
factory.setHost("192.168.1.3");
factory.setPort(5672);
factory.setVirtualHost("/sx");
factory.setUsername("sx");
factory.setPassword("123456");
Connection connection = factory