Provice
public class Provider {
public static void main(String[] args) throws IOException {
//获取连接对象
Connection connection = RabbitMQUtil.getConnection();
//获取通道对象
Channel channel = connection.createChannel();
//通过通道声明交换机 参数1:交换机名称 参数2:交换机类型 direct 路由模式
channel.exchangeDeclare("logs_direct","direct");
//发送消息
String routingKey = "error";
channel.basicPublish("logs_direct",routingKey,null,"发布的消息".getBytes(StandardCharsets.UTF_8));
RabbitMQUtil.closeAll(channel,connection);
}
}
设计了一个日志的情景,info、warning、error三个日志等级都需要被打印,但是仅仅将error作磁盘持久化
Consumer1(持久化)
public class Consumer1 {
public static void main(String[] args) throws IOException {
String exchangeName = "logs_direct";
Connection connection = RabbitMQUtil.getConnection();
Channel channel = connection.createChannel();
//通道绑定交换机
channel.exchangeDeclare(exchangeName,"direct");
//临时队列
String queue = channel.queueDeclare().getQueue();
//绑定交换机和队列
channel.queueBind(queue,exchangeName,"error");
//消费消息
channel.basicConsume(queue,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));
}
});
}
}
Consumer2(打印输出)
public class Consumer2 {
public static void main(String[] args) throws IOException {
String exchangeName = "logs_direct";
Connection connection = RabbitMQUtil.getConnection();
Channel channel = connection.createChannel();
channel.exchangeDeclare(exchangeName,"direct");
String queue = channel.queueDeclare().getQueue();
//临时队列和交换机绑定
channel.queueBind(queue,exchangeName,"info");
channel.queueBind(queue,exchangeName,"error");
channel.queueBind(queue,exchangeName,"warning");
channel.basicConsume(queue,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));
}
});
}
}