标签:public mamicode https 学习 端口 handle down 红色 nal
RabbitMQ六种队列模式-简单队列 [本文]
RabbitMQ六种队列模式-工作队列
RabbitMQ六种队列模式-发布订阅
RabbitMQ六种队列模式-路由模式
RabbitMQ六种队列模式-主题模式
在官网的教程中,描述了如上六类工作队列模式:
接下来几篇文章一起来看看这几种队列模式吧,本篇为简单队列模式。
1 实现功能2 构建项目2.1 导入依赖2.2 封装Connection3 生产者4 消费者5 测试环节5.1 启动RabbitMQ5.2 创建vhost5.3 依次运行Producer\Customer6 简单队列总结
功能描述:一个生产者 P 发送消息到队列 Q,一个消费者 C 接收
P 表示为生产者 、C 表示为消费者,红色表示队列。
创建一个简单的maven项目
- rabbitmq 父工程
-- common 存放公用工具类
-- customer 消费者
-- producer生产者
在 rabbitmq 父工程 pom.xml 导入 maven 依赖
<dependencies>
<dependency>
<groupId>com.rabbitmq</groupId>
<artifactId>amqp-client</artifactId>
<version>3.6.5</version>
</dependency>
</dependencies>
common模块中封装 rabbitmq 连接类
public class MQConnectionUtils {
public static Connection newConnection() throws IOException, TimeoutException {
/** 1.定义连接工厂 */
ConnectionFactory factory = new ConnectionFactory();
/** 2.设置服务器地址 */
factory.setHost("127.0.0.1");
/** 3.设置协议端口号 */
factory.setPort(5672);
/** 4.设置vhost */
factory.setVirtualHost("test001_host");
/** 5.设置用户名称 */
factory.setUsername("guest");
/** 6.设置用户密码 */
factory.setPassword("guest");
/** 7.创建新的连接 */
Connection newConnection = factory.newConnection();
return newConnection;
}
}
生产者负责创建消息队列并发送消息入列,简单分为5步:
public class Producer {
/** 队列名称 */
private static final String QUEUE_NAME = "test_queue";
public static void main(String[] args) throws IOException, TimeoutException {
/** 1.获取连接 */
Connection newConnection = MQConnectionUtils.newConnection();
/** 2.创建通道 */
Channel channel = newConnection.createChannel();
/** 3.创建队列声明 */
channel.queueDeclare(QUEUE_NAME, false, false, false, null);
String msg = "我是生产者生成的消息";
System.out.println("生产者发送消息:" + msg);
/** 4.发送消息 */
channel.basicPublish("", QUEUE_NAME, null, msg.getBytes());
channel.close();
newConnection.close();
}
}
消费者实现和生产者实现过程差不多,但是没有关闭连接和通道,是因为要消费者一直等待随时可能发来的消息,大致分为如下3步:
public class Customer {
/** 队列名称 */
private static final String QUEUE_NAME = "test_queue";
public static void main(String[] args) throws IOException, TimeoutException {
System.out.println("002");
/** 1.获取连接 */
Connection newConnection = MQConnectionUtils.newConnection();
/** 2.获取通道 */
Channel channel = newConnection.createChannel();
channel.queueDeclare(QUEUE_NAME, false, false, false, null);
DefaultConsumer defaultConsumer = new DefaultConsumer(channel) {
@Override
public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body)
throws IOException {
String msgString = new String(body, "UTF-8");
System.out.println("消费者获取消息:" + msgString);
}
};
/** 3.监听队列 */
channel.basicConsume(QUEUE_NAME, true, defaultConsumer);
}
}
至此,整个项目代码写完了,接下来就是测试环节
Producer生产者启动
Rabbit管理平台,三条消息
Customer消费者启动
简单队列也称为点对点,即一个生产者对应一个消费者,生产者发送消息到队列,消费者在队列中取出消息消费。
生产者大致步骤:
消费者大致步骤:
简单队列虽然简单,但是有一些不足,比如这种点对点无疑在复杂情况下会产生大量冗余代码,继续看下一篇工作队列吧。
案例代码:https://www.lanzous.com/i5ydu6d
我创建了一个java相关的公众号,用来记录自己的学习之路,感兴趣的小伙伴可以关注一下微信公众号哈:niceyoo
标签:public mamicode https 学习 端口 handle down 红色 nal
原文地址:https://www.cnblogs.com/niceyoo/p/11448111.html