zoukankan      html  css  js  c++  java
  • RabbitMQ整合Spring Booot【Exchange-路由key模式】

    pom.xml

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
      <modelVersion>4.0.0</modelVersion>
      <groupId>com.toov5.rabibitMQScribe</groupId>
      <artifactId>rabibitMQScribe</artifactId>
      <version>0.0.1-SNAPSHOT</version>
      
      <dependencies>
    		<dependency>
    			<groupId>com.rabbitmq</groupId>
    			<artifactId>amqp-client</artifactId>
    			<version>3.6.5</version>
    		</dependency>
    	</dependencies>
      
    </project>
    

     producer

    package com.toov5.routing;
    
    import java.io.IOException;
    import java.util.concurrent.TimeoutException;
    
    import com.rabbitmq.client.Channel;
    import com.rabbitmq.client.Connection;
    import com.toov5.utils.MQConnectionUtils;
    
    //生产者 交换机类型 producerFanout类型
    public class RoutingProducer {
        //交换机名称
         private static final String EXCHANGE_NAME = "my_routing"; 
         public static void main(String[] args) throws IOException, TimeoutException {
            //建立MQ连接
             Connection connection = MQConnectionUtils.newConnection();
            //创建通道
              Channel channel = connection.createChannel();
              //生产者绑定交换机
              channel.exchangeDeclare(EXCHANGE_NAME, "direct");  //交换机名称  交换机类型
              String routingKey="email";
              //创建对应的消息 
              String msString = "my_Routing_destination_msg"+routingKey;
              //通过频道 发送消息
              System.out.println("生产者投递消息:"+msString);
              channel.basicPublish(EXCHANGE_NAME, routingKey, null, msString.getBytes());
              //关闭通道 和 连接
              channel.close();
              connection.close();
        }
        
    } 

    consumer:

    package com.toov5.routing;
    
    import java.io.IOException;
    import java.util.concurrent.TimeoutException;
    
    import com.rabbitmq.client.Channel;
    import com.rabbitmq.client.Connection;
    import com.rabbitmq.client.DefaultConsumer;
    import com.rabbitmq.client.Envelope;
    import com.rabbitmq.client.AMQP.BasicProperties;
    import com.toov5.utils.MQConnectionUtils;
    
    //邮件消费者
    public class ConsumerEmailRouting {
        private static final String EMAIL_QUEUE ="email_queue_routing";
        //交换机名称
       private static final String EXCHANGE_NAME = "my_routing"; 
         public static void main(String[] args) throws IOException, TimeoutException {
             System.out.println("邮件消费者启动");
            //建立MQ连接
             Connection connection = MQConnectionUtils.newConnection(); 
            //创建通道
              Channel channel = connection.createChannel();
              
            //消费者声明队列
              channel.queueDeclare(EMAIL_QUEUE, false, false, false, null);
             //消费者队列绑定 路由
              channel.queueBind(EMAIL_QUEUE, EXCHANGE_NAME, "email");
              //消费者监听消息
          DefaultConsumer defaultConsumer = new DefaultConsumer(channel) {
                  //重写监听方法
                 @Override
                 public void handleDelivery(String consumerTag, Envelope envelope, BasicProperties properties, byte[] body)
                         throws IOException {             
                     String msg = new String(body,"UTF-8");
                     System.out.println("邮件消费者获取生产者消息"+msg);
                 }
             };
             channel.basicConsume(EMAIL_QUEUE,true, defaultConsumer);   //绑定队列 事件监听
                
        }
    }
    package com.toov5.routing;
    
    import java.io.IOException;
    import java.util.concurrent.TimeoutException;
    
    import com.rabbitmq.client.Channel;
    import com.rabbitmq.client.Connection;
    import com.rabbitmq.client.DefaultConsumer;
    import com.rabbitmq.client.Envelope;
    import com.rabbitmq.client.AMQP.BasicProperties;
    import com.toov5.utils.MQConnectionUtils;
    
    //邮件消费者
    public class ConsumerSMSRouting {
        private static final String SMS_QUEUE ="sms_queue_routing";
        //交换机名称
       private static final String EXCHANGE_NAME = "my_routing"; 
         public static void main(String[] args) throws IOException, TimeoutException {
             System.out.println("短信消费者启动");
            //建立MQ连接
             Connection connection = MQConnectionUtils.newConnection(); 
            //创建通道
              Channel channel = connection.createChannel();
              
            //消费者声明队列
              channel.queueDeclare(SMS_QUEUE, false, false, false, null);
             //消费者队列绑定 路由
              channel.queueBind(SMS_QUEUE, EXCHANGE_NAME, "email");
             channel.queueBind(SMS_QUEUE, EXCHANGE_NAME, "sms");
              //消费者监听消息
          DefaultConsumer defaultConsumer = new DefaultConsumer(channel) {
                  //重写监听方法
                 @Override
                 public void handleDelivery(String consumerTag, Envelope envelope, BasicProperties properties, byte[] body)
                         throws IOException {             
                     String msg = new String(body,"UTF-8");
                     System.out.println("邮件消费者获取生产者消息"+msg);
                 }
             };
             channel.basicConsume(SMS_QUEUE,true, defaultConsumer);   //绑定队列 事件监听
                
        }
    }

    运行结果:

    绑定两个:

     

  • 相关阅读:
    前端面试详解
    nodejs mysql模块简单封装
    关于python字符串拼接的几种方法
    JavaScript递归简单实现个对象深拷贝
    HTTP协议类
    dom事件类
    css之浮动
    Less主要用法
    js中控制流管理的四种方法
    js for in 和 for of 的区别
  • 原文地址:https://www.cnblogs.com/toov5/p/9944019.html
Copyright © 2011-2022 走看看