rabbitMQ学习笔记(六) topic类型消息。

上一节中使用了消息路由,消费者可以选择性的接收消息。 但是这样还是不够灵活。 

比如某个消费者要订阅娱乐新闻消息 。 包括新浪、网易、腾讯的娱乐新闻。那么消费者就需要绑定三次,分别绑定这三个网站的消息类型。 如果新闻门户更多了,那么消费者将要绑定个更多的消息类型, 其实消费者只是需要订阅娱乐新闻,不管是哪个网站的新闻,都需要。 那么在rabbitMQ中可以使用topic类型。 模糊匹配消息类型。

模糊匹配中的 *代表一个  #代表零个或1个

示例:

package com.zf.rabbitmq06;

import java.io.IOException;

import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
import com.rabbitmq.client.ConsumerCancelledException;
import com.rabbitmq.client.QueueingConsumer;
import com.rabbitmq.client.QueueingConsumer.Delivery;
import com.rabbitmq.client.ShutdownSignalException;

/**
 * 接收消息
 * @author zhoufeng
 *
 */
public class Recv06_01 {

	public static void main(String[] args) throws IOException, ShutdownSignalException, ConsumerCancelledException, InterruptedException {
		
		ConnectionFactory connFac = new ConnectionFactory() ;
		
		connFac.setHost("127.0.0.1");
		
		Connection conn = connFac.newConnection() ;
		
		Channel channel = conn.createChannel() ;
		
		
		String exchangeName = "exchange03";
		
		channel.exchangeDeclare(exchangeName, "topic") ;
		
		String queueName = channel.queueDeclare().getQueue() ;
		
		//第三个参数就是type,这里表示只接收type01类型的消息。
		channel.queueBind(queueName, exchangeName, "#.type01") ;
		
		
		//配置好获取消息的方式
		QueueingConsumer consumer = new QueueingConsumer(channel) ;
		channel.basicConsume(queueName, true, consumer) ;
		
		//循环获取消息
		while(true){
			
			//获取消息,如果没有消息,这一步将会一直阻塞
			Delivery delivery = consumer.nextDelivery() ;
			
			String msg = new String(delivery.getBody()) ;  
			
			System.out.println("received message[" + msg + "] from " + exchangeName);
		}
		
	}
	
}


package com.zf.rabbitmq06;

import java.io.IOException;

import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;

/**
 * 发送消息
 * @author zhoufeng
 *
 */
public class Sender06 {
	
	public static void main(String[] args) throws IOException {
		
		ConnectionFactory connFac = new ConnectionFactory() ;
		
		//RabbitMQ-Server安装在本机,所以直接用127.0.0.1
		connFac.setHost("127.0.0.1");
		
		//创建一个连接
		Connection conn = connFac.newConnection() ;
		
		//创建一个渠道
		Channel channel = conn.createChannel() ;
		
		String exchangeName = "exchange03";
		
		String messageType = "fs.type01";
		
		channel.exchangeDeclare(exchangeName, "topic") ;
		
		//定义Queue名
		String msg = "Hello World!";
		
		//发送消息
		channel.basicPublish( exchangeName , messageType , null , msg.getBytes());
		
		System.out.println("send message[" + msg + "] to "+ exchangeName +" success!");
		
		channel.close(); 
		conn.close(); 
		
	}

}

使用topic之后 。不管Sender端发送的消息类型是fs.type01 还是 xx.type01 还是 type01 ,消费者都会收到消息

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值