green.green.green 3/4 green.red.green 3
red.#.green red.green.* #.green *.green.#
>
> Topics模式官网介绍:https://www.rabbitmq.com/tutorials/tutorial-five-java.html
>
>
>
#### 4.5.2 生产者
package com.lscl.rabbitmq;
import com.rabbitmq.client.BuiltinExchangeType; import com.rabbitmq.client.Channel; import com.rabbitmq.client.Connection; import com.rabbitmq.client.ConnectionFactory;
public class Producer05_Topic {
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 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";