RabbitMQ 的简单使用 主题模式
1.进入jar包
<dependency>
<groupId>com.rabbitmq</groupId>
<artifactId>amqp-client</artifactId>
<version>4.7.0</version>
</dependency>
2. 消息发布者
import java.io.IOException;
import java.util.concurrent.TimeoutException;
import com.google.common.base.Strings;
import com.rabbitmq.client.BuiltinExchangeType;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
/**
* 发布者
*/
public class ComPublisher {
public static void main(String[] args) throws IOException, TimeoutException {
final String EXCHANGE_NAME = "topic_exc";
final String ROUTING_KEY = "exc_key";
//创建连接连接到MabbitMQ
ConnectionFactory factory = new ConnectionFactory();
// 设置MabbitMQ所在主机ip或者主机名
factory.setHost("127.0.0.1");
factory.setPort(5672);
factory.setUsername("guest");
factory.setPassword("guest");
// 创建一个连接
Connection connection = factory.newConnection();
// 创建消息通道
Channel channel = connection.createChannel();
// 指定转发——广播
channel.exchangeDeclare(EXCHANGE_NAME, BuiltinExchangeType.TOPIC);
for(int i=0;i<100;i++){
//每一个设备,每种日志级别发送一条日志消息
// 发送的消息
String message =i+" Hello World!"+Strings.repeat(".", i+1);
//参数1:exchange name
//参数2:routing key
channel.basicPublish(EXCHANGE_NAME, ROUTING_KEY, null, message.getBytes());
}
// 关闭频道和连接
channel.close();
connection.close();
}
}
3.消息订阅者
import java.io.IOException;
import java.util.concurrent.TimeoutException;
import com.rabbitmq.client.AMQP;
import com.rabbitmq.client.BuiltinExchangeType;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
import com.rabbitmq.client.Consumer;
import com.rabbitmq.client.DefaultConsumer;
import com.rabbitmq.client.Envelope;
/**
* 订阅者
*/
public class ComSubscribe {
public static void main(String[] argv) throws IOException, InterruptedException, TimeoutException {
final String EXCHANGE_NAME = "topic_exc";
final String ROUTING_KEY = "exc_key";
final String QUEUE_NAME = "topic_queue";
ConnectionFactory factory = new ConnectionFactory();
factory.setHost("127.0.0.1");
// 打开连接和创建频道,与发送端一样
Connection connection = factory.newConnection();
Channel channel = connection.createChannel();
//声明exchange
channel.exchangeDeclare(EXCHANGE_NAME, BuiltinExchangeType.TOPIC);
// 声明一个队列
//String queueName = channel.queueDeclare().getQueue();//随机队列
channel.queueDeclare(QUEUE_NAME, true, false, false, null);
channel.queueBind(QUEUE_NAME, EXCHANGE_NAME, ROUTING_KEY);
// 创建队列消费者
Consumer consumer = new DefaultConsumer(channel) {
@Override
public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {
String message = new String(body, "UTF-8");
System.out.println( envelope.getRoutingKey() + " : " + message );
}
};
channel.basicConsume(QUEUE_NAME, true, consumer);
}
}