Bootstrap

《RabbitMQ系列教程-第四章-05-RabbitMQ工作模式之Topics主题模式》_rabbitmq新思维第四章第五节

    factory.setHost("192.168.40.132");
    factory.setPort(5672);
    factory.setUsername("lscl");
    factory.setPassword("admin");
    factory.setVirtualHost("/lscl");

    // 2.创建连接
    Connection connection = factory.newConnection();

    // 3.创建频道
    Channel channel = connection.createChannel();

    String exchangeName = "test\_topic";

    //5. 创建交换机
    channel.exchangeDeclare(exchangeName, BuiltinExchangeType.TOPIC,true,false,false,null);

    //6. 创建队列
    String queue1Name = "test\_topic\_queue1";
    String queue2Name = "test\_topic\_queue2";
    String queue3Name = "test\_topic\_queue3";
    String queue4Name = "test\_topic\_queue4";

    channel.queueDeclare(queue1Name,true,false,false,null);
    channel.queueDeclare(queue2Name,true,false,false,null);
    channel.queueDeclare(queue3Name,true,false,false,null);
    channel.queueDeclare(queue4Name,true,false,false,null);

    //7. 绑定队列和交换机
    channel.queueBind(queue1Name,exchangeName,"red.#.green");
    channel.queueBind(queue2Name,exchangeName,"red.green.\*");
    channel.queueBind(queue3Name,exchangeName,"#.green");
    channel.queueBind(queue4Name,exchangeName,"\*.green.#");

    String body = "topic....";
    //8. 发送消息
    /\*

red.green.green 1/2/3/4
green.green 3/4
green.red.blue
green.green.green 3/4
green.red.green 3

red.#.green
red.green.*
#.green
*.green.#
*/
// channel.basicPublish(exchangeName,“red.green.green”,null,body.getBytes());
// channel.basicPublish(exchangeName,“green.green”,null,body.getBytes());
// channel.basicPublish(exchangeName,“green.red.blue”,null,body.getBytes());
// channel.basicPublish(exchangeName,“green.green.green”,null,body.getBytes());
channel.basicPublish(exchangeName,“green.red.green”,null,body.getBytes());

    //9. 释放资源
    channel.close();
    connection.close();
}

}


#### 4.5.3 消费者-1



package com.lscl.rabbitmq;

import com.rabbitmq.client.*;

import java.io.IOException;

public class Consumer07_Topic_01 {

public static void main(String[] args) throws Exception{
    // 创建连接工厂,用于获取频道channel
    ConnectionFactory factory=new ConnectionFactory();

    factory.setHost("192.168.40.132");
    factory.setPort(5672);
    factory.setUsername("lscl");
    factory.setPassword("admin");
    factory.setVirtualHost("/lscl");

    // 2.创建连接
    Connection connection = factory.newConnection();

    // 3.创建频道
    Channel channel = connection.createChannel();

    // 定义队列
    String queueName="test\_topic\_queue1";
    channel.queueDeclare(queueName,true,false,false,null);

    Consumer consumer = new DefaultConsumer(channel){

        @Override
        public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {

            System.out.println("body:"+new String(body));
        }
    };

    // 接受queue的消息
    channel.basicConsume(queueName,true,consumer);

    // 不释放资源,让rabbitmq一直监听
}

}


#### 4.5.4 消费者-2


和消费者-1代码一样,只是队列名换了



String queueName=“test_topic_queue2”;


#### 4.5.5 消费者-3


和消费者-1代码一样,只是队列名换了



String queueName=“test_topic_queue3”;


#### 4.5.6 消费者-4


和消费者-1代码一样,只是队列名换了



String queueName=“test_topic_queue4”;


#### 4.5.7 Topics模式小结


在`Topics`下(`Exchange`类型为`topic`,也叫主题模式),`Routing Key`的用法更加丰富,主要有`#`、`*`两个符号,`#`号可以匹配0个或多个词,`*`号可以匹配任意个词,包括0个;






**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

**[需要这份系统化资料的朋友,可以点击这里获取](https://bbs.csdn.net/topics/618540462)**

**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

;