zoukankan      html  css  js  c++  java
  • rabbitMQ学习笔记(五) 消息路由

    生产者会生产出很多消息 , 但是不同的消费者可能会有不同的需求,只需要接收指定的消息,其他的消息需要被过滤掉。 这时候就可以对消息进行过滤了。 在消费者端设置好需要接收的消息类型。

    如果不使用默认的Exchange发送消息,而是使用我们自定定义的Exchange发送消息,那么下面这个方法的第二个参数就不是QueueName了,而是消息的类型。

    channel.basicPublish( exchangeName , messageType , null , msg.getBytes());

    示例:Sender05.java

     1 package com.zf.rabbitmq05;
     2 
     3 import java.io.IOException;
     4 
     5 import com.rabbitmq.client.Channel;
     6 import com.rabbitmq.client.Connection;
     7 import com.rabbitmq.client.ConnectionFactory;
     8 
     9 /**
    10  * 发送消息
    11  * @author zhoufeng
    12  *
    13  */
    14 public class Sender05 {
    15     
    16     public static void main(String[] args) throws IOException {
    17         
    18         ConnectionFactory connFac = new ConnectionFactory() ;
    19         
    20         //RabbitMQ-Server安装在本机,所以直接用127.0.0.1
    21         connFac.setHost("127.0.0.1");
    22         
    23         //创建一个连接
    24         Connection conn = connFac.newConnection() ;
    25         
    26         //创建一个渠道
    27         Channel channel = conn.createChannel() ;
    28         
    29         String exchangeName = "exchange02";
    30         
    31         String messageType = "type01";
    32         
    33         channel.exchangeDeclare(exchangeName, "direct") ;
    34         
    35         //定义Queue名
    36         String msg = "Hello World!";
    37         
    38         //发送消息
    39         channel.basicPublish( exchangeName , messageType , null , msg.getBytes());
    40         
    41         System.out.println("send message[" + msg + "] to "+ exchangeName +" success!");
    42         
    43         channel.close(); 
    44         conn.close(); 
    45         
    46     }
    47 
    48 }
     1 package com.zf.rabbitmq05;
     2 
     3 import java.io.IOException;
     4 
     5 import com.rabbitmq.client.Channel;
     6 import com.rabbitmq.client.Connection;
     7 import com.rabbitmq.client.ConnectionFactory;
     8 import com.rabbitmq.client.ConsumerCancelledException;
     9 import com.rabbitmq.client.QueueingConsumer;
    10 import com.rabbitmq.client.QueueingConsumer.Delivery;
    11 import com.rabbitmq.client.ShutdownSignalException;
    12 
    13 /**
    14  * 接收消息
    15  * @author zhoufeng
    16  *
    17  */
    18 public class Recv05_01 {
    19 
    20     public static void main(String[] args) throws IOException, ShutdownSignalException, ConsumerCancelledException, InterruptedException {
    21         
    22         ConnectionFactory connFac = new ConnectionFactory() ;
    23         
    24         connFac.setHost("127.0.0.1");
    25         
    26         Connection conn = connFac.newConnection() ;
    27         
    28         Channel channel = conn.createChannel() ;
    29         
    30         
    31         String exchangeName = "exchange02";
    32         
    33         channel.exchangeDeclare(exchangeName, "direct") ;
    34         
    35         String queueName = channel.queueDeclare().getQueue() ;
    36         
    37         //第三个参数就是type,这里表示只接收type01类型的消息。
    38         channel.queueBind(queueName, exchangeName, "type01") ;
    39         //也可以选择接收多种类型的消息。只需要再下面再绑定一次就可以了
    40         channel.queueBind(queueName, exchangeName, "type02") ;
    41         
    42         
    43         //配置好获取消息的方式
    44         QueueingConsumer consumer = new QueueingConsumer(channel) ;
    45         channel.basicConsume(queueName, true, consumer) ;
    46         
    47         //循环获取消息
    48         while(true){
    49             
    50             //获取消息,如果没有消息,这一步将会一直阻塞
    51             Delivery delivery = consumer.nextDelivery() ;
    52             
    53             String msg = new String(delivery.getBody()) ;  
    54             
    55             System.out.println("received message[" + msg + "] from " + exchangeName);
    56         }
    57         
    58     }
    59     
    60 }

    这时,启动Recv05_01.java 然后启动Sender05.java ,消费者端就会收到消息。

    然后将Sender05.java 中的messageType分别改为type02  type03 然后发送消息 , 可以看到消费者端能接收到type02的消息,但是不能接收到type03的消息。

  • 相关阅读:
    谷歌浏览器禁止缩放和全面屏显示
    常用正则表达式
    封装时间函数
    年月日,时分秒,星期
    昨天,明天,月初,月末,最近七天,最近一个月,今天零时js
    React框架
    javaweb基础备忘
    一些java基础知识的备忘
    查看deepin版本
    java中堆栈的一些理解备忘
  • 原文地址:https://www.cnblogs.com/jianliang-Wu/p/5684879.html
Copyright © 2011-2022 走看看