1、简介
RabbitMQ是消息代理:它接受和转发消息。你可以把它当作一个邮局:当你把你要邮寄的邮件放在信箱里时,你可以肯定Postman先生最终会把邮件送到你的收件人那里。在这个比喻中,RabbitMQ是邮局,邮局邮差。RabbitMQ和邮局之间的主要区别是,它不处理纸张,而是接受、存储和转发二进制数据‒消息。
整体的设计如下图:
java环境下,使用rabbitmq需要用到jar包:amqp-client.jar
2、发送消息
想要将消息发送到队列中,我们需要进行下面几步:
(1)建立服务链接
1 ConnectionFactory factory = new ConnectionFactory(); 2 factory.setHost("localhost"); // 设置ip地址 3 factory.setPort(5672); // rabbit的端口号,默认为5672,可以不写 4 factory.setPassword("rabbit"); // 发送消息用户的登录密码 5 factory.setUsername("rabbit"); // 发送消息用户的登录用户名 6 Connection connection = factory.newConnection(); // 新建链接 7 Channel channel = connection.createChannel(); // 创建channel
(2)声明消息队列
1 channel.queueDeclare("QUEUE_NAME", false, false, false, null);
(3)调用方法发送消息
1 String message = "Hello World!"; // 待发送的消息 2 channel.basicPublish("", QUEUE_NAME, null, message.getBytes());
(4)发送消息过后,需要关闭链接
1 channel.close(); 2 connection.close();
3、接收消息
接下来,当生产者将消息发送到队列之后,我们消费者一方就可以从队列中接收到消息了:
(1)建立服务器链接,和生产者一方一样
1 ConnectionFactory factory = new ConnectionFactory(); 2 factory.setHost("localhost"); // 设置ip地址 3 factory.setPort(5672); // rabbit的端口号,默认为5672,可以不写 4 factory.setPassword("rabbit"); // 发送消息用户的登录密码 5 factory.setUsername("rabbit"); // 发送消息用户的登录用户名 6 Connection connection = factory.newConnection(); // 新建链接 7 Channel channel = connection.createChannel(); // 创建channel
(2)声明消息队列
1 channel.queueDeclare("QUEUE_NAME", false, false, false, null);
(3)声明回调方法,接收服务器从队列中发过来的消息
1 Consumer consumer = new DefaultConsumer(channel) { 2 @Override 3 public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException { 6 String message = new String(body, "UTF-8"); 7 System.out.println(" [x] Received '" + message + "'"); 8 } 9 }; 10 channel.basicConsume(QUEUE_NAME, true, consumer);
4、运行查看结果
分别运行生产者方和消费者方的代码过后,通过生产者方发送消息过后,就可以在消费者方接收到发送过来的数据了。