消息生产者
package net.zssz.direct;
import com.rabbitmq.client.BuiltinExchangeType;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
import java.nio.charset.StandardCharsets;
/**
* 对应第6章第2节
* 发送消息
*/
public class Send {
// private final static String QUEUE_NAME = "work_mq_rr";
private final static String EXCHANGE_NAME = "exchange_direct";
public static void main(String[] argv) throws Exception {
ConnectionFactory factory = new ConnectionFactory();
factory.setHost("192.1.1.101");
factory.setUsername("admin");
factory.setPassword("password");
factory.setVirtualHost("/dev");//设置虚拟主机
factory.setPort(5672);
//JDK7语法 或自动关闭 connnection和channel
//创建连接
try ( Connection connection = factory.newConnection();
//创建信道
Channel channel = connection.createChannel()) {
//绑定交换机,直连交换机
channel.exchangeDeclare(EXCHANGE_NAME, BuiltinExchangeType.DIRECT);
String error = "我是订单服务的error日志";
String info = "我是订单服务的info日志";
String debug = "我是订单服务的debug日志";
channel.basicPublish(EXCHANGE_NAME, "errorRoutingkey",null, error.getBytes(StandardCharsets.UTF_8));
channel.basicPublish(EXCHANGE_NAME, "infoRoutingkey",null,info.getBytes(StandardCharsets.UTF_8));
channel.basicPublish(EXCHANGE_NAME, "debugRoutingkey",null, debug.getBytes(StandardCharsets.UTF_8));
System.out.println("dirext消息发送成功");
}
}
}
消费者
package net.zssz.direct;
import com.rabbitmq.client.*;
import java.io.IOException;
import java.util.concurrent.TimeUnit;
/**
* 消费
*/
public class Recv1 {
private final static String EXCHANGE_NAME = "exchange_direct";
public static void main(String[] argv) throws Exception {
TimeUnit.SECONDS.sleep(6);
ConnectionFactory factory = new ConnectionFactory();
factory.setHost("192.1.1.101");
factory.setUsername("admin");
factory.setPassword("password");
factory.setVirtualHost("/dev");
factory.setPort(5672);
//消费者一般不增加自动关闭
Connection connection = factory.newConnection();
Channel channel = connection.createChannel();
//绑定交换机,fanout扇形 即广播
channel.exchangeDeclare(EXCHANGE_NAME, BuiltinExchangeType.DIRECT);
//获取队列
String queueName = channel.queueDeclare().getQueue();
//绑定交换机和队列,direct交换机需要制定routingkey
channel.queueBind(queueName,EXCHANGE_NAME,"errorRoutingkey");
channel.queueBind(queueName,EXCHANGE_NAME,"infoRoutingkey");
channel.queueBind(queueName,EXCHANGE_NAME,"debugRoutingkey");
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,"utf-8"));
//手工确认消息消费,不是多条确认
channel.basicAck(envelope.getDeliveryTag(), false);
}
};
channel.basicConsume(queueName, false,consumer);
}
}