赞
踩
本文引用的代码源自《RabbitMQ实战指南》
关键的类和接口主要有Channel、Connection、ConnectionFactory、Consumer等,它们主要的作用如下:
与RabbitMQ相关的开发工作,也主要围绕Channel、Connection这两个类展开
知道了RabbitMQ的IP地址、端口号、用户名、密码后,可以通过以下代码连接RabbitMQ,
在创建完Connection以后,就建立了当前服务与RabbitMQ的连接。下一步就是使用Connection对象建立信道
Channel channel = conn.createChannel()
创建完Channel之后,可以使用Channel对象来发送、接收消息
注意:一个Connection可以创建多个Channel对象,但是Channel对象不是线程安全的。也就是说,最好为每个线程创建一个Channel
一般来说,调用connectionFactory.newConnection()
或者connection.createChannel()
以后,Connection和Channel就处于开启状态了。如果在后续使用channel的过程中,Connection或者Channel关闭了,程序会抛出异常
在绑定交换器和队列前,要确保先声明交换器和队列,即前两行所示
channel.exchangeDeclare
是声明一个交换器。这里传入参数的意思是:声明一个名为exchangeName
的交换器,交换器类型为direct
,并且这是一个可持久化的交换器(第三个入参=true)。可持久化的意思是交换器信息会存入2磁盘,服务器重启后不会丢失交换器的信息
channel.queueDeclare
是声明一个队列,不带任何入参是声明一个由RabbitMQ命名的、非持久化队列
channel.queueBind
是绑定交换器和队列
既然交换器和队列存在绑定操作,也就必然存在解绑操作,可以通过queueUnbind
方法来解绑
虽然RabbitMQ使用交换器和队列来处理消息,但因为消息只存储在队列中,所以交换器实际不消耗服务器资源,只有队列会消耗服务器资源。
换句话说,是否在代码里创建队列也可以见仁见智:
发送消息可以使用channel.basicPulish
方法,例如:
以上代码意思是:
除了byte数组,还可以使用channel.basicPulish
的重载方法,发送具有特殊格式的消息
RabbitMQ有两种消费消息的方式:push(推)、pull(拉)
Push模式下,消费者持续订阅队列,一般要实现Consumer接口或继承DefaultConsumer类
消费动作是调用channel.basicConsume
来实现
以上调用channel.basicConsume
的意思是:
channel.basicAck
)handleDelivery
方法Pull模式下,通过channel.basicGet
方法获取单条消息
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。