赞
踩
RabbitMQ使用多种协议。本教程使用AMQP 0-9-1,这是一个开放的通用消息传递协议。RabbitMQ有许多不同语言的客户端。我们将使用RabbitMQ提供的Java客户端。
<dependency>
<groupId>com.rabbitmq</groupId>
<artifactId>amqp-client</artifactId>
<version>5.6.0</version>
</dependency>
ConnectionFactory connectionFactory = new ConnectionFactory();
connectionFactory.setHost("124.220.82.113");
connectionFactory.setPort(5672);
try(Connection connection = connectionFactory.newConnection()) {
Channel channel = connection.createChannel();
/*
作用:声明队列
参数:
queue – 队列的名称
durable – 如果我们声明一个持久队列,则为 true(持久到数据库中)
exclusive – 如果我们声明一个排他性队列(只允许一个消费者监听这个队列),则为 true。
autoDelete – 如果我们声明一个自动删除队列,则为 true(当没有消费者时自动删除)
arguments – 队列的其他属性(构造参数)
返回:
一种声明-确认方法,用于指示队列已成功声明
抛出:
IOException – 如果遇到错误
*/
channel.queueDeclare(QUEUE_NAME,false,false,false,null);
String message = "hello damage!";
/*
作用:发布消息
参数:
exchange - 将消息发布到的交换机,交换模式下默认""
routingKey - 路由密匙
props - 消息的其他属性-路游表头等
body - 消息正文
*/
channel.basicPublish("",QUEUE_NAME,null,message.getBytes());
可以看到有一条消息,使用了默认的交换机,路游key值为hello,消息体为"hello damage!"
ConnectionFactory connectionFactory = new ConnectionFactory();
connectionFactory.setHost("124.220.82.113");
connectionFactory.setPort(5672);
try(Connection connection = connectionFactory.newConnection()) {
Channel channel = connection.createChannel();
channel.queueDeclare(QUEUE_NAME,false,false,false,null);
Consumer consumer = new DefaultConsumer(channel){
/*
回调方法,收到消息后自动执行该方法
*/
@Override
public void handleDelivery(String consumerTag, Envelope envelope,
AMQP.BasicProperties properties, byte[] body) throws IOException {
System.out.println("consumerTag : " + consumerTag);
System.out.println("envelope getExchange: " + envelope.getExchange());
System.out.println("envelope getRoutingKey: " + envelope.getRoutingKey());
System.out.println("envelope getDeliveryTag: " + envelope.getDeliveryTag());
System.out.println("properties : " + properties);
System.out.println("body : " + Arrays.toString(body));
}
};
channel.basicConsume(QUEUE_NAME,true,consumer);
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。