RabbitMQ 分为 生产者, 消费者
生产者, 向指定的消息通道(队列)中, 插入消息
package com.yuchen.demo.hello;
import com.rabbitmq.client.ConnectionFactory;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.Channel;
public class Send {
// 队列名称
private final static String QUEUE_NAME = "lsy_hello";
public static void main(String[] args) throws Exception {
// 创建连接连接到MabbitMQ
ConnectionFactory factory = new ConnectionFactory();
factory.setHost("10.13.144.24");
factory.setVirtualHost("/");
factory.setPort(5672);
factory.setUsername("admin");
factory.setPassword("admin");
// 新建连接
Connection connection = factory.newConnection();
// 建立通道
Channel channel = connection.createChannel();
// 创建队列 (队列名称, 持久化, 仅有1个consumer 与autoDelete配合使用 没有consumer自动删除 , 自动删除, 其他参数)
channel.queueDeclare(QUEUE_NAME, false, false, false, null);
// 发送消息 byte[]
// 用户可以把自己的消息序列化成JSON等格式在转成byte[]发送到队列中取出消息后再反序列化得到消息内容
String message = "Hello World!";
channel.basicPublish("", QUEUE_NAME, null, message.getBytes());
System.out.println("发送成功: '" + message + "'");
// 关闭连接
channel.close();
connection.close();
}
}
消费者, 从指定的消息通道(队列)中, 读取消息
消费者, 阻塞监听指定队列的消息
package com.yuchen.demo.hello;
import java.io.IOException;
import com.rabbitmq.client.AMQP;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
import com.rabbitmq.client.Consumer;
import com.rabbitmq.client.DefaultConsumer;
import com.rabbitmq.client.Envelope;
public class MessageConsumer {
// 队列名称
private final static String QUEUE_NAME = "lsy_hello";
public static void main(String[] args) throws Exception {
// 创建连接连接到MabbitMQ
ConnectionFactory factory = new ConnectionFactory();
factory.setHost("10.13.144.24");
factory.setVirtualHost("/");
factory.setPort(5672);
factory.setUsername("admin");
factory.setPassword("admin");
// 新建连接
Connection connection = factory.newConnection();
// 建立通道
Channel channel = connection.createChannel();
// 声明队列, 可能在发送方之前启动接收方, 确保队列存在。
channel.queueDeclare(QUEUE_NAME, false, false, false, null);
System.out.println(" [*] Waiting for messages. To exit press CTRL+C");
Consumer consumer = new DefaultConsumer(channel) {
@Override
public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {
String message = new String(body, "UTF-8");
System.out.println("接收到远端消息: '" + message + "'");
}
};
channel.basicConsume(QUEUE_NAME, true, consumer);
}
}