模型:

与路由模式类似,但是路由模式是精确匹配,而Topic模式是可以模糊匹配。
使用通配符#,*
#表示匹配0个或多个
*表示匹配1个
生产者
public class Provider {
private static final String EXCHANGE_NAME="my_exchange";
private static final String ROUTE_KEY = "my_route";
public static void main(String[] args) throws Exception {
Connection conn = RabbitMqUtil.getConnection();
Channel channel = conn.createChannel();
//声明交换机,指明分发类型
channel.exchangeDeclare(EXCHANGE_NAME, "topic");
//发送消息到交换机
channel.basicPublish(EXCHANGE_NAME, ROUTE_KEY, null, "exchange data route key topic。。。。".getBytes());
channel.close();
conn.close();
}
}
声明交换机的时候指明分发类型为topic
消费者
public class Reciver2 {
private static final String EXCHANGE_NAME = "my_exchange";
private static final String QUNUE_NAME = "exchange_qunue2";
private static final String ROUTE_KEY = "my_route.#";
public static void main(String[] args) throws Exception {
Connection conn = RabbitMqUtil.getConnection();
Channel channel = conn.createChannel();
//声明队列
channel.queueDeclare(QUNUE_NAME,false,false,false,null);
//绑定队列到交换机
channel.queueBind(QUNUE_NAME, EXCHANGE_NAME, ROUTE_KEY);
//设置每次只发送一条消息
channel.basicQos(1);
Consumer consumer = new DefaultConsumer(channel) {
public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties,
byte[] body) throws IOException {
String msg = new String(body);
System.out.println(msg);
}
};
channel.basicConsume(QUNUE_NAME, true, consumer);
}
}
消费者中绑定到交换机中的时候,routingKey使用通配符模式。
my_route.# 可匹配my_route、my_route.add、my_route.add.add等
my_route.* 可匹配my_route.add my_route.delete等
RabbitMQ的Topic模式提供模糊匹配功能,不同于路由模式的精确匹配。在Topic模式中,使用#匹配0个或多个,*匹配1个。生产者声明交换机时指定类型为topic,消费者通过通配符模式如my_route.#(匹配多级)和my_route.*(匹配一级)进行绑定。
1555

被折叠的 条评论
为什么被折叠?



