目录
Rabbitmq五种工作模式(四)
一.路由模式(匹配转发)
1路由的结构
1.生产端:
2.交换机:
3.消费端:
2.代码
1.生产端
2.消费端
3.测试结果
总结:
依然携带消息绑定具体的路由key
存放生产端的数据,根据路由KEY发送给对应的队列,其他队列无法获取到数据,对应的消费端可以获取
按照需求,多个绑定一个队列,形成争抢,一个绑定一个队列就是简单结构;
public class DirectSend {
public static void main(String[] args) throws Exception{
//拿到连接对象
//创建一个连接从长
ConnectionFactory factory=new ConnectionFactory();
//需要将连接属性信息,交给连接工厂使用,ip,port,user,password,virturHost
factory.setHost("10.42.60.249");
factory.setPort(5672);
factory.setUsername("guest");
factory.setPassword("guest");
factory.setVirtualHost("/");
//从连接工厂获取长连接.
Connection conn = factory.newConnection();
//从长连接中获取信道对象
Channel channel=conn.createChannel();
//自定义交换机的声明;有了就直接用,没有就创建一个
//三种类型,使用字符串定义 fanout,direct,topic
//channel.exchangeDeclare("direct01","direct");
channel.exchangeDeclare("topic01","topic");
//声明队列,绑定交换机
channel.queueDeclare("tQueue01", false, false, false, null);
channel.queueDeclare("tQueue02", false, false, false, null);
channel.queueBind("tQueue01", "topic01", "beijing.#");
channel.queueBind("tQueue02", "topic01", "beijing.chaoyang.#");
//发送消息给fanout01
channel.basicPublish("topic01", "beijing.chaoyang.nanjinglu", null,
"hello direct".getBytes());
}
public class DirectRec {
private static final String EX="direct01";
private static final String queue="tQueue01";
public static void main(String[] args) throws Exception, TimeoutException {
ConnectionFactory factory=new ConnectionFactory();
//需要将连接属性信息,交给连接工厂使用,ip,port,user,password,virturHost
factory.setHost("10.42.60.249");
factory.setPort(5672);
factory.setUsername("guest");
factory.setPassword("guest");
factory.setVirtualHost("/");
//从连接工厂获取长连接.
Connection conn = factory.newConnection();
//从长连接中获取信道对象
Channel channel=conn.createChannel();
/*//声明队列,默认绑定AMQP default
channel.queueDeclare(queue, false, false, false, null);
//绑定队列到交换机
channel.queueBind(queue, EX, "");*/
//生成消费对象,绑定消费对象到队列
QueueingConsumer cons=new QueueingConsumer(channel);
channel.basicConsume(queue, true,cons);
//消费监听消息
while(true){
Delivery deli=cons.nextDelivery();
System.out.println("consumer01绑定的队列的路由key:"+deli.getEnvelope().getRoutingKey());
System.out.println("consumer01接收消息:"+new String(deli.getBody()));
}
}
}
生产端发送数据,由路由key(可以多个如 地区 北京,上海,深圳等)判断,分配对应的队列中(其他队列无法获取),消费端随时可以从队列中获取索取 队列绑定路由KEY