生产者:
package com.gavin.mq.topic;
import com.gavin.utils.RabbitMQUtils;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.MessageProperties;
import org.junit.Test; import java.io.IOException;
import java.util.concurrent.TimeoutException;
/**
* 路由订阅模型routing-topic模式:
* 相比direct模式,topic模式下,routingKey可以使用通配符
* # 匹配零个或多个词 * * 匹配有且仅有一个词
* audit.# 匹配audit.irs.properties 和audit.irs
* audit.* 匹配audit.irs
*/
public class WorkProvider {
@Test
public void testSendMessage() throws IOException, TimeoutException {
Connection connection = RabbitMQUtils.getConnection();
Channel channel = connection.createChannel();
//声明交换机 参数1:交换机名称
channel.exchangeDeclare("logs_topic","topic");
//routingKey为info
channel.basicPublish("logs_topic","log.info", MessageProperties.PERSISTENT_BASIC,("hello topic").getBytes());
RabbitMQUtils.close(channel,connection);
}
}
消费者1:
package com.gavin.mq.topic;
import com.gavin.utils.RabbitMQUtils;
import com.rabbitmq.client.*;
import java.io.IOException;
import java.util.concurrent.TimeoutException;
public class WorkConsumer {
public static void main(String[] args) throws IOException, TimeoutException {
Connection connection = RabbitMQUtils.getConnection();
Channel channel = connection.createChannel();
channel.exchangeDeclare("logs_topic","topic");
String tempQueue = channel.queueDeclare().getQueue();
channel.queueBind(tempQueue,"logs_topic","log.*");
channel.basicConsume(tempQueue,true,new DefaultConsumer(channel){
@Override
public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {
System.out.println(new String(body));
}
});
}}
消费者2
package com.gavin.mq.topic;
import com.gavin.utils.RabbitMQUtils;
import com.rabbitmq.client.*;
import java.io.IOException;
import java.util.concurrent.TimeoutException;
public class WorkConsumer2 {
public static void main(String[] args) throws IOException, TimeoutException {
Connection connection = RabbitMQUtils.getConnection();
Channel channel = connection.createChannel();
channel.exchangeDeclare("logs_topic","topic");
String tempQueue = channel.queueDeclare().getQueue();
channel.queueBind(tempQueue,"logs_topic","log.#");
channel.basicConsume(tempQueue,true,new DefaultConsumer(channel){
@Override
public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {
System.out.println("consumer2:"+new String(body));
}
});
}}