rabbitmq用法--直接发送消息给队列
2017-12-17 13:56
453 查看
rabbitmq 术语:ConnectionFactory、Connection、Channel都是RabbitMQ对外提供的API中最基本的对象。Connection是RabbitMQ的socket链接,它封装了socket协议相关部分逻辑。ConnectionFactory为Connection的制造工厂。Channel是我们与RabbitMQ打交道的最重要的一个接口,我们大部分的业务操作是在Channel这个接口中完成的,包括定义Queue、定义Exchange、绑定Queue与Exchange、发布消息接收消息等。Queue(队列)是RabbitMQ的内部对象,用于存储消息,用下图表示。多个消费者可以订阅同一个Queue,这时Queue中的消息会被平均分摊给多个消费者进行处理,而不是每个消费者都收到所有的消息并处理。第一种: 直接发送消息给队列直接发送消息给队列不需要指定exchange ,默认为空。直接发送消息给队列之前需要先创建此队列。代码如下:
private static final String HOST = "XXXX"; private static final String USERNAME = "xxx"; private static final String PASSWORD = "xxx"; public static void main(String[] args) throws IOException, TimeoutException { ConnectionFactory connectionFactory = new ConnectionFactory(); connectionFactory.setHost(HOST); connectionFactory.setUsername(USERNAME); connectionFactory.setPassword(PASSWORD); Connection connection = connectionFactory.newConnection(); Channel channel = connection.createChannel();
// 一定先创建队列,否则系统不会报错,但是信息被丢弃了。 channel.queueDeclare("WSX", false,false,false,null); channel.basicPublish("","WSX",null,"wsx".getBytes()); channel.close(); connection.close(); }消费者consumer代码:这里切记,接收到消息之后要调用channel.basicAck 返回给服务器已经接收到消息,否则此消息在队列中不会删除
public static void main(String[] args) throws IOException, TimeoutException {ConnectionFactory connectionFactory = new ConnectionFactory();connectionFactory.setHost(HOST);connectionFactory.setUsername(USERNAME);connectionFactory.setPassword(PASSWORD);Connection connection = connectionFactory.newConnection();Channel channel = connection.createChannel();channel.queueDeclare("WSX", false,false,false,null);channel.basicConsume("WSX",new ConsumerImpl(channel));}
public class ConsumerImpl implements Consumer{private Channel channel;public ConsumerImpl(Channel channel){this.channel = channel;}public void handleConsumeOk(String consumerTag) {System.out.println("isOk");}public void handleCancelOk(String consumerTag) {}public void handleCancel(String consumerTag) throws IOException {}public void handleShutdownSignal(String consumerTag, ShutdownSignalException sig) {}public void handleRecoverOk(String consumerTag) {System.out.println("recoverOk");}public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {System.out.println(new String(body));System.out.println(envelope.getDeliveryTag());channel.basicAck(envelope.getDeliveryTag(),false);}}
相关文章推荐
- SpringBoot的RabbitMQ消息队列: 一、消息发送接收第一印象
- RabbitMQ(python实现)学习之二:Producer发送消息至多个消息队列queue(广播消息)
- java调用rabbitmq消息队列发送和接收消息实例
- SpringBoot的RabbitMQ消息队列: 一、消息发送接收第一印象
- Spring学习笔记3之消息队列(rabbitmq)发送邮件功能
- RabbitMq六种使用模式(1)_直接指定消息接收队列
- RabbitMQ如何保证发送端消息的可靠投递-发生镜像队列发生故障转移时
- 短时间内向rabbitmq的某条队列发送大量消息时,可能会丢包
- RabbitMQ(python实现)学习之二:Producer发送消息至多个消息队列queue(广播消息)
- Spring学习笔记3——消息队列(rabbitmq), 发送邮件
- Java——定时请求后端接口数据发送RabbitMQ消息队列到指定MQ服务器
- 最近发现系统rabbitmq丢消息比较严重,于是想了些方案来查找原因,给将消息发送方式添加确认机制。 我们在本地模拟了wms发送打标消息的场景. 1. 有事务 2. 先发点对点队列, 再发订
- RabbitMQ消息队列(六):使用主题进行消息分发
- MQ消息队列--RabbitMQ整合Spring理论及实例讲解
- rabbitMQ消息队列原理
- 关于消息队列的使用----ActiveMQ,RabbitMQ,ZeroMQ,Kafka,MetaMQ,RocketMQ
- shell脚本监控rabbitmq队列消息数量(堵塞情况)
- MSMQ-发送消息到远程专用队列path格式