rabbitMQ 학습노트 (5) 메시지 라우팅

3080 단어
생산자는 많은 정보를 생산할 수 있지만 소비자마다 다른 수요가 있을 수 있기 때문에 지정된 정보만 받고 다른 정보는 필터를 받아야 한다.이럴 때 정보를 필터할 수 있다.소비자단에 수신해야 할 메시지 유형을 설정하세요.
기본 Exchange로 메시지를 보내지 않고 우리가 정의한 Exchange로 메시지를 보내면 다음 방법의 두 번째 인자는QueueName이 아니라 메시지의 형식입니다.
channel.basicPublish( exchangeName , messageType , null , msg.getBytes());
예: Sender05.java
package com.zf.rabbitmq05;

import java.io.IOException;

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

/**
 *  
 * @author zhoufeng
 *
 */
public class Sender05 {
	
	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 = "exchange02";
		
		String messageType = "type01";
		
		channel.exchangeDeclare(exchangeName, "direct") ;
		
		// 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(); 
		
	}

}
package com.zf.rabbitmq05;

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 Recv05_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 = "exchange02";
		
		channel.exchangeDeclare(exchangeName, "direct") ;
		
		String queueName = channel.queueDeclare().getQueue() ;
		
		// type, type01 。
		channel.queueBind(queueName, exchangeName, "type01") ;
		// 。 
		channel.queueBind(queueName, exchangeName, "type02") ;
		
		
		// 
		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);
		}
		
	}
	
}

이때 Recv05_ 시작01.java 그리고 Sender05를 시작합니다.자바, 소비자측에서 메시지를 받을 수 있습니다.
그리고 Sender05.자바의messageType는 각각 type02 type03로 바뀌어 메시지를 보내면 소비자측에서 type02의 메시지를 받을 수 있지만 type03의 메시지를 받을 수 없습니다.

좋은 웹페이지 즐겨찾기