mq配置
首先进入mq的ui管理界面创建一个虚拟机和用户
- 创建虚拟机
- 创建用户
- 将虚拟机和用户绑定
至此mq的配置就完成了,就可以在代码中使用了
使用
- 生产者
public class HelloWorldSender {
@Test
public void testSendMessage() throws IOException, TimeoutException {
// 创建连接工厂
ConnectionFactory connectionFactory = new ConnectionFactory();
// 通过工厂设置虚拟主机的地址,端口号,用户名,密码等
connectionFactory.setHost("192.168.246.137");
connectionFactory.setPort(5672);
connectionFactory.setVirtualHost("/ems");
connectionFactory.setUsername("ems");
connectionFactory.setPassword("123");
// 通过工厂创建连接
Connection connection = connectionFactory.newConnection();
// 通过连接获取通道
Channel channel = connection.createChannel();
// 通过通道绑定队列
// 参数1:队列名称,如果不存在就自动创建
// 参数2:队列是否持久化
// 参数3:是否独占队列
// 参数4:消费完成是否自动删除
// 参数5:额外参数
channel.queueDeclare("hello", false, false, false, null);
// 发布消息
// 参数1:交换机名称
// 参数2:队列名称
// 参数3:传递消息的额外配置
// 参数4:消息的具体内容
channel.basicPublish("", "hello", null, "胡志军".getBytes());
channel.close();
connection.close();
}
}
- 消费者
public class HelloWorldCustomer {
public static void main(String[] args) throws IOException, TimeoutException {
testCustomerMessage();
}
public static void testCustomerMessage() throws IOException, TimeoutException {
ConnectionFactory connectionFactory = new ConnectionFactory();
// 通过工厂设置虚拟主机的地址,端口号,用户名,密码等
connectionFactory.setHost("192.168.246.137");
connectionFactory.setPort(5672);
connectionFactory.setVirtualHost("/ems");
connectionFactory.setUsername("ems");
connectionFactory.setPassword("123");
// 通过工厂创建连接
Connection connection = connectionFactory.newConnection();
// 通过连接获取通道
Channel channel = connection.createChannel();
channel.queueDeclare("hello", false, false, false, null);
channel.basicConsume("hello", true, new DefaultConsumer(channel){
@Override
public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {
super.handleDelivery(consumerTag, envelope, properties, body);
System.out.println("cousumerMessage==== "+ new String(body));
}
});
// channel.close();
// connection.close();
}
}
这里要注意的是,消费者不能用@Test注解,不然不能连续监听,也打印不出结果。一定要放在main方法中。