rabbitmq-topic-支持通配符的订阅模式

160 阅读1分钟

生产者:

package com.gavin.mq.topic;
import com.gavin.utils.RabbitMQUtils;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.MessageProperties;
import org.junit.Test; import java.io.IOException;
import java.util.concurrent.TimeoutException; 
/** 
* 路由订阅模型routing-topic模式: 
* 相比direct模式,topic模式下,routingKey可以使用通配符 
* # 匹配零个或多个词 * * 匹配有且仅有一个词 
* audit.# 匹配audit.irs.properties 和audit.irs 
* audit.* 匹配audit.irs 
*/
public class WorkProvider {    
       @Test    
       public void testSendMessage() throws IOException, TimeoutException {         
	Connection connection = RabbitMQUtils.getConnection();        
	Channel channel = connection.createChannel();        
	//声明交换机 参数1:交换机名称        
	channel.exchangeDeclare("logs_topic","topic");        
	//routingKey为info        
	channel.basicPublish("logs_topic","log.info", MessageProperties.PERSISTENT_BASIC,("hello topic").getBytes());        
	RabbitMQUtils.close(channel,connection);   
     }
}

消费者1:

package com.gavin.mq.topic;
import com.gavin.utils.RabbitMQUtils;
import com.rabbitmq.client.*; 
import java.io.IOException;
import java.util.concurrent.TimeoutException; 

public class WorkConsumer {    
public static void main(String[] args) throws IOException, TimeoutException {        
Connection connection = RabbitMQUtils.getConnection();        
Channel channel = connection.createChannel();        
channel.exchangeDeclare("logs_topic","topic");        
String tempQueue = channel.queueDeclare().getQueue();        
channel.queueBind(tempQueue,"logs_topic","log.*");        
channel.basicConsume(tempQueue,true,new DefaultConsumer(channel){            
	@Override            
	public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {                
			System.out.println(new String(body));            
		}       
	 });   
 }}

消费者2

package com.gavin.mq.topic; 
import com.gavin.utils.RabbitMQUtils;
import com.rabbitmq.client.*; 
import java.io.IOException;
import java.util.concurrent.TimeoutException; 

public class WorkConsumer2 {    
public static void main(String[] args) throws IOException, TimeoutException {        
	Connection connection = RabbitMQUtils.getConnection();        
	Channel channel = connection.createChannel();        
	channel.exchangeDeclare("logs_topic","topic");        
	String tempQueue = channel.queueDeclare().getQueue();        
	channel.queueBind(tempQueue,"logs_topic","log.#");        
	channel.basicConsume(tempQueue,true,new DefaultConsumer(channel){            
	@Override            
	public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {
                	System.out.println("consumer2:"+new String(body));           
 	}        
	});    
}}