简书:亚武de小文 【原创:转载请注明出处】
生产者与消费者模型
RabbitMQ 是遵从 AMQP 协议的, 换句话说 , RabbitMQ 就是 AMQP协议的 Erlang 的实现(当然 RabbitMQ 还支持 STOMP2 、 MQTT3 等协议 ) 0 AMQP 的模型架构和 RabbitMQ 的模型架构是一样的,生产者将消息发送给交换器,交换器和队列绑定 。
AMQP模型图
内部三层
- Module Layer:
位于协议最高层,主要定义了一些供客户端调用的命令,客户端可以利用这些命令实现自己的业务逻辑。例如,客户端可以使用 Queue . Declare 命令声明一个队列或者使用 Basic.Consume 订阅消费一个队列中的消息。
- Session Layer:
位于中间层,主要负责将客户端的命令发送给服务器,再将服务端的应答返回给客户端,主要为客户端与服务器之间的通信提供可靠性同步机制和错误处理。
- Transport Layer:
位于最底层,主要传输二进制数据流 ,提供帧的处理、信道复用、错误检测和数据表示等。
amqp生产者代码
- 简易生产者代码,详见Rabbitmq打怪升级之路(四)生产者与消费者模型
ConnectionFactory factory = new ConnectionFactory();
factory.setHost("127.0.0.1");
factory.setUsername("guest");
factory.setPassword("guest");
Connection connection = factory.newConnection();
Channel channel = connection.createChannel();
String message = "Hello,亚武de小文!";
channel.basicPublish("", QUEUE_NAME, null, msg);
amqp消费者代码
- 简易消费者代码,详见Rabbitmq打怪升级之路(四)生产者与消费者模型
ConnectionFactory factory = new ConnectionFactory();
Connection connection = factory.newConnection();
Channel channel = connection.createChannel();
Consumer consumer = new DefaultConsumer(channel) {......}
channel.basicConsume(QUEUE_NAME, true, consumer);
常用命令
名称 | 是否包含内容体 | 对应客户端中方法 | 简要描述 |
---|---|---|---|
Connection.Start | 否 | factory.newConnection | 建立连接相关 |
Connection.Close | 否 | connection.close | 关闭连接 |
Channel.Open | 否 | connection.openChannel | 开启信道 |
Channel.Close | 否 | channel.close | 关闭信道 |
Exchange.Declare | 否 | channel.exchangeDeclare | 声明交换器 |
Exchange.Declare | 否 | channel.exchangeDelete | 删除交换器 |
Queue.Declare | 否 | channel.queueDeclare | 声明队列 |
Queue.Bind | 否 | channel.queueBind | 队列与交换机绑定 |
Queue.purge | 否 | channel.queuePurge | 清除队列中的内容 |
Queue.Delete | 否 | channel.queueDelete | 删除队列 |
Queue.Unbind | 否 | channel.queueUnbind | 队列与交换机解绑 |