~~~// 创建连接工厂
ConnectionFactory factory = new ConnectionFactory();
// 设置RabbitMQ相关信息
factory.setUsername("tianya");
factory.setPassword("tianya");
factory.setVirtualHost("/");
factory.setHost("192.168.199.104");
factory.setPort(5672);
// 调用工厂模式创建连接
Connection conn = factory.newConnection();
// 调用工厂模式创建通道
Channel channel = conn.createChannel();
// 定义交换机的名称
String exchangeName = "TianYaExchange";
channel.exchangeDeclare(exchangeName, "direct", true);
// channel.queueDeclare().getQueue()
// 队列名称:设置
String queueName = "OrderMQ";
System.out.println("队列名称:" + queueName);
String routingKey = "tianyaroutingkey";
channel.queueBind(queueName, exchangeName, routingKey);
SerializeUtil tools = new SerializeUtil();
// 调用channel的相关方法去监听队列,接收消息
// queueName是队列的名字
// 是否自动确认消息的接收情况,我们使用true
boolean autoAck = false;
channel.basicConsume(queueName, autoAck, "myConsumerTag", new DefaultConsumer(channel) {
@Override
public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {
String routingKey = envelope.getRoutingKey();
String contentType = properties.getContentType();
long deliveryTag = envelope.getDeliveryTag();
// 取出订单队列
Orders orders = tools.deserialize(body);
System.out.println("Linux RabbitMQ 1000w秒杀订单:" + orders.getTitle() + ",地址:" + orders.getAddress() + "备注:" + orders.getRemark());
channel.basicAck(deliveryTag, false);
}
});
System.out.println("Java Linuex消息队列1000w订单实战,接收消息队列!!");
// 阻塞当前进程,连接一直存在
System.in.read();
// 关闭通道和连接
channel.close();
conn.close();
~~~