(一)第一个rabbitmq例子

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方法中。

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页