rabbitmq路由模式
rabbitmq路由模式
跟发布订阅模式的无意识广播不一样,路由模式可以实现指定路由的匹配,对应的交换机类型为direct
代码实现

消费者A
package com.yl.route;
import com.rabbitmq.client.*;
import com.yl.util.RabbitConstant;
import com.yl.util.RabbitUtils;
import java.io.IOException;
/**
* 消费者A
*
* @author Y-wee
*/
public class RouteConsumerA {
public static void main(String[] args) throws IOException {
Connection connection = RabbitUtils.getConnection();
Channel channel = connection.createChannel();
channel.exchangeDeclare(RabbitConstant.EXCHANGE_ROUTE, BuiltinExchangeType.DIRECT);
channel.queueDeclare(RabbitConstant.QUEUE_ROUTE_A,false,false,false,null);
channel.queueBind(RabbitConstant.QUEUE_ROUTE_A, RabbitConstant.EXCHANGE_ROUTE,"key1");
channel.queueBind(RabbitConstant.QUEUE_ROUTE_A, RabbitConstant.EXCHANGE_ROUTE,"key2");
DeliverCallback deliverCallback = (consumerTag, message) -> {
System.out.println("ConsumerA接收到消息:"+new String(message.getBody()));
channel.basicAck(message.getEnvelope().getDeliveryTag(),false);
};
CancelCallback cancelCallback = (consumerTag) -> {
System.out.println("消费失败");
};
channel.basicConsume(RabbitConstant.QUEUE_ROUTE_A, false, deliverCallback, cancelCallback);
}
}
RabbitUtils是笔者自定义的一个工具类,用来获取连接
RabbitConstant是笔者自定义的一个常量类,里面存储了队列名和交换机名
消费者B
package com.yl.route;
import com.rabbitmq.client.*;
import com.yl.util.RabbitConstant;
import com.yl.util.RabbitUtils;
import java.io.IOException;
/**
* 消费者B
*
* @author Y-wee
*/
public class RouteConsumerB {
public static void main(String[] args) throws IOException {
Connection connection = RabbitUtils.getConnection();
Channel channel = connection.createChannel();
channel.exchangeDeclare(RabbitConstant.EXCHANGE_ROUTE, BuiltinExchangeType.DIRECT);
channel.queueDeclare(RabbitConstant.QUEUE_ROUTE_B,false,false,false,null);
channel.queueBind(RabbitConstant.QUEUE_ROUTE_B, RabbitConstant.EXCHANGE_ROUTE,"key3");
DeliverCallback deliverCallback = (consumerTag, message) -> {
System.out.println("ConsumerB接收到消息:"+new String(message.getBody()));
channel.basicAck(message.getEnvelope().getDeliveryTag(),false);
};
CancelCallback cancelCallback = (consumerTag) -> {
System.out.println("消费失败");
};
channel.basicConsume(RabbitConstant.QUEUE_ROUTE_B, false, deliverCallback, cancelCallback);
}
}
生产者
package com.yl.route;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.yl.util.RabbitConstant;
import com.yl.util.RabbitUtils;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
/**
* 生产者
*
* @author Y-wee
*/
public class RouteProvider {
public static void main(String[] args) throws IOException {
Map<String, String> map = new HashMap<>();
map.put("key1","value1");
map.put("key2","value2");
map.put("key3","value3");
Connection connection = RabbitUtils.getConnection();
Channel channel = connection.createChannel();
for(String key:map.keySet()){
channel.basicPublish(RabbitConstant.EXCHANGE_ROUTE,key,null,map.get(key).getBytes());
}
System.out.println("消息发送完毕");
}
}
控制台打印结果
RouteConsumerA
ConsumerA接收到消息:value1
ConsumerA接收到消息:value2
RouteConsumerB
ConsumerB接收到消息:value3
记得快乐
浙公网安备 33010602011771号