#yyds干货盘点#RabbitMQ的简单模式案例讲解,非常详细

书史足自悦,安用勤与劬。这篇文章主要讲述#yyds干货盘点#RabbitMQ的简单模式案例讲解,非常详细相关的知识,希望能为你提供帮助。
RabbitMQ简单模式

相关视频教程(来自动力节点):https://www.bilibili.com/video/BV1Ap4y1D7tU
相关资料下载:http://www.bjpowernode.com/?51cto
简单模式
RabbitMQ是一个消息中间件,你可以想象它是一个邮局。当你把信件放到邮箱里时,能够确信邮递员会正确地递送你的信件。RabbitMq就是一个邮箱、一个邮局和一个邮递员。
  • 发送消息的程序是生产者
  • 队列就代表一个邮箱。虽然消息会流经RbbitMQ和你的应用程序,但消息只能被存储在队列里。队列存储空间只受服务器内存和磁盘限制,它本质上是一个大的消息缓冲区。多个生产者可以向同一个队列发送消息,多个消费者也可以从同一个队列接收消息.
  • 消费者等待从队列接收消息
【#yyds干货盘点#RabbitMQ的简单模式案例讲解,非常详细】
生产者发送消息
package rabbitmq.simple;

import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;

public class Test1
public static void main(String[] args) throws Exception
//创建连接工厂,并设置连接信息
ConnectionFactory f = new ConnectionFactory();
f.setHost("192.168.64.140");
f.setPort(5672); //可选,5672是默认端口
f.setUsername("admin");
f.setPassword("admin");

/*
* 与rabbitmq服务器建立连接,
* rabbitmq服务器端使用的是nio,会复用tcp连接,
* 并开辟多个信道与客户端通信
* 以减轻服务器端建立连接的开销
*/
Connection c = f.newConnection();
//建立信道
Channel ch = c.createChannel();

/*
* 声明队列,会在rabbitmq中创建一个队列
* 如果已经创建过该队列,就不能再使用其他参数来创建
*
* 参数含义:
*-queue: 队列名称
*-durable: 队列持久化,true表示RabbitMQ重启后队列仍存在
*-exclusive: 排他,true表示限制仅当前连接可用
*-autoDelete: 当最后一个消费者断开后,是否删除队列
*-arguments: 其他参数
*/
ch.queueDeclare("helloworld", false,false,false,null);

/*
* 发布消息
* 这里把消息向默认交换机发送.
* 默认交换机隐含与所有队列绑定,routing key即为队列名称
*
* 参数含义:
*-exchange: 交换机名称,空串表示默认交换机"(AMQP default)",不能用 null
*-routingKey: 对于默认交换机,路由键就是目标队列名称
*-props: 其他参数,例如头信息
*-body: 消息内容byte[]数组
*/
ch.basicPublish("", "helloworld", null, "Hello world!".getBytes());

System.out.println("消息已发送");
c.close();


消费者接收消息
package rabbitmq.simple;

import java.io.IOException;
import java.util.concurrent.TimeoutException;
import com.rabbitmq.client.CancelCallback;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
import com.rabbitmq.client.DeliverCallback;
import com.rabbitmq.client.Delivery;

public class Test2
public static void main(String[] args) throws Exception
//连接工厂
ConnectionFactory f = new ConnectionFactory();
f.setHost("192.168.64.140");
f.setUsername("admin");
f.setPassword("admin");
//建立连接
Connection c = f.newConnection();
//建立信道
Channel ch = c.createChannel();
//声明队列,如果该队列已经创建过,则不会重复创建
ch.queueDeclare("helloworld",false,false,false,null);
System.out.println("等待接收数据");

//收到消息后用来处理消息的回调对象
DeliverCallback callback = new DeliverCallback()
@Override
public void handle(String consumerTag, Delivery message) throws IOException
String msg = new String(message.getBody(), "UTF-8");
System.out.println("收到: "+msg);

;

//消费者取消时的回调对象
CancelCallback cancel = new CancelCallback()
@Override
public void handle(String consumerTag) throws IOException

;

ch.basicConsume("helloworld", true, callback, cancel);



    推荐阅读