简单的消息发送与消费
创建JAVA开发环境
引入依赖
<dependency>
<groupId>com.rabbitmq</groupId>
<artifactId>amqp-client</artifactId>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.6</version>
</dependency>
生产者代码
第一步:创建ConnectionFactory链接工厂
第二步:获取connection链接
第三步:创建channel信道
第四步:声明队列
- queue : 队列名称
- durable : 是否持久化
- exclusive :
1.声明了exclusive属性的队列只对首次声明它的连接可见,并且在连接断开时自动删除
2.针对连接可见,只要是当前connection下的信道都可以访问
3.一旦该队列被声明,其他连接无法声明相同名称的排他队列,其他连接的通道也无法绑定此队列
4.队列即使显示声明为durable,连接断开时(注意不是信道断开)也会被自动删除 - autoDelete : 是否自动删除
- arguments 其它参数
第五步:发布消息
- exchange : 交换机,不传的情况下有个默认交换机
- routingKey : 默认交换机会通过routingKey将消息发送到对应的消息队列中
- props : 其它参数信息
- body : 消息内容,需要转换为字节数组
public class RabbitMqProducer {
private static final String QUEUE_NAME = "hello";
public static void main(String[] args) throws IOException, TimeoutException {
ConnectionFactory connectionFactory = new ConnectionFactory();
connectionFactory.setHost("192.168.145.128");
connectionFactory.setUsername("admin");
connectionFactory.setPassword("123");
Connection connection = connectionFactory.newConnection();
Channel channel = connection.createChannel();
/**
* String queue, boolean durable, boolean exclusive, boolean autoDelete, Map<String, Object> arguments
* queue : 队列名称
* durable : 是否持久化
* exclusive : 1.声明了exclusive属性的队列只对首次声明它的连接可见,并且在连接断开时自动删除
* 2.针对连接可见,只要是当前connection下的信道都可以访问
* 3.一旦该队列被声明,其他连接无法声明相同名称的排他队列,其他连接的通道也无法绑定此队列
* 4.队列即使显示声明为durable,连接断开时(注意不是信道断开)也会被自动删除
* autoDelete : 是否自动删除
* arguments 其它参数
*/
channel.queueDeclare(QUEUE_NAME, true, false, false, null);
/**
* String exchange, String routingKey, BasicProperties props, byte[] body
* exchange : 交换机,不传的情况下有个默认交换机
* routingKey : 默认交换机会通过routingKey将消息发送到对应的消息队列中
* props : 其它参数信息
* body : 消息内容,需要转换为字节数组
*/
channel.basicPublish("", QUEUE_NAME, null, "heihei".getBytes());
System.out.println("消息发送完毕");
}
}
消费者代码
第一步:创建ConnectionFactory链接工厂
第二步:获取connection链接
第三步:创建channel信道
第四步:消费消息
- queue : 队列名称
- autoAck : 消费成功是否自动确认
- deliverCallback : 消费成功之后的回调
- cancelCallback : 取消消费后的回调
public class RabbitMqConsumer {
private static final String QUEUE_NAME = "hello";
public static void main(String[] args) throws IOException, TimeoutException {
ConnectionFactory connectionFactory = new ConnectionFactory();
connectionFactory.setHost("192.168.145.128");
connectionFactory.setUsername("admin");
connectionFactory.setPassword("123");
Connection connection = connectionFactory.newConnection();
Channel channel = connection.createChannel();
/**
* String queue, boolean autoAck, DeliverCallback deliverCallback, CancelCallback cancelCallback
* queue : 队列名称
* autoAck : 消费成功是否自动确认
* deliverCallback : 消费成功之后的回调
* cancelCallback : 取消消费后的回调
*/
channel.basicConsume(QUEUE_NAME, true, (s, message) -> {
System.out.println(new String(message.getBody()));
}, s -> {
System.out.println(s);
});
}
}