前言
心态好了,就没那么累了。心情好了,所见皆是明媚风景。
复制代码
“一时解决不了的问题,那就利用这个契机,看清自己的局限性,对自己进行一场拨乱反正。”正如老话所说,一念放下,万般自在。如果你正被烦心事扰乱心神,不妨学会断舍离。断掉胡思乱想,社区垃圾情绪,离开负面能量。心态好了,就没那么累了。心情好了,所见皆是明媚风景。
十年生死两茫茫,写程序,到天亮。
千行代码,Bug何处藏。
纵使上线又怎样,朝令改,夕断肠。
领导每天新想法,天天改,日日忙。
相顾无言,惟有泪千行。
每晚灯火阑珊处,夜难寐,再写两行!
复制代码
RabbitMQ
简介
AMQP
,即Advanced Message Queuing Protocol
,高级消息队列协议
,是应用层协议的一个开放标准,为面向消息的中间件设计。消息中间件主要用于组件之间的解耦,消息的发送者无需知道消息使用者的存在,反之亦然。 AMQP的主要特征是面向消息、队列、路由(包括点对点和发布/订阅)、可靠性、安全。RabbitMQ
是一个开源的AMQP
实现,服务器端用Erlang
语言编写,支持多种客户端,如:Python、Ruby、.NET、Java、JMS、C、PHP、ActionScript、XMPP、STOMP
等,支持AJAX
。用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗
。
要学习 RabbitMQ
最靠谱的地方当然是他的官网:www.rabbitmq.com/,其他地方难免有解读误…
1. 引入依赖
本次需要创建2个子项目,一个 rabbitmq-provider
(生产者),一个 rabbitmq-consumer
(消费者)。
首先创建 rabbitmq-provider
,
pom.xml
里用到的jar依赖:
<!--rabbitmq-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
复制代码
2. 然后 application.yml
:
ps:里面的
虚拟 / 配置项
不是必须的,你们不创建,就不用加这个配置项。
srping:
# rabbitmq消息队列配置
rabbitmq:
password: 账号
username: 密码
port: 5672
addresses: 地址
#开启发送失败返回
publisher-returns: true
#配置确认回调
publisher-confirm-type: correlated
listener:
simple:
#指定最小的消费者数量.
concurrency: 5
#指定最大的消费者数量.
max-concurrency: 10
#开启ack
acknowledge-mode: auto
# 最多一次消费多少条数据 -限流
prefetch: 1
#开启ack
direct:
acknowledge-mode: auto
#支持消息的确认与返回
template:
mandatory: true
复制代码
3. direct exchange(直连型交换机)
创建
DirectRabbitConfig.java
(对于队列和交换机持久化以及连接使用设置,在注释里有说明,后面的不同交换机的配置就不做同样说明了):
package com.cyj.dream.test.config;
import org.springframework.amqp.core.Binding;
import org.springframework.amqp.core.BindingBuilder;
import org.springframework.amqp.core.DirectExchange;
import org.springframework.amqp.core.Queue;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* @Description: 直连型交换机
* 1. 接着我们先使用下direct exchange(直连型交换机),创建DirectRabbitConfig.java(对于队列和交换机持久化以及连接使用设置,
* 在注释里有说明,后面的不同交换机的配置就不做同样说明了):
* @BelongsProject: DreamChardonnay
* @BelongsPackage: com.cyj.dream.test.config
* @Author: ChenYongJia
* @CreateTime: 2021-10-18
* @Email: chen87647213@163.com
* @Version: 1.0
*/
@Configuration
public class DirectRabbitConfig {
/**
* 队列 起名:TestDirectQueue
*
* @return
*/
@Bean
public Queue TestDirectQueue() {
// durable:是否持久化,默认是false,持久化队列:会被存储在磁盘上,当消息代理重启时仍然存在,暂存队列:当前连接有效
// exclusive:默认也是false,只能被当前创建的连接使用,而且当连接关闭后队列即被删除。此参考优先级高于durable
// autoDelete:是否自动删除,当没有生产者或者消费者使用此队列,该队列会自动删除。
// return new Queue("TestDirectQueue",true,true,false);
//一般设置一下队列的持久化就好,其余两个就是默认false
return new Queue("TestDirectQueue", true);
}
/**
* Direct交换机 起名:TestDirectExchange
*
* @return
*/
@Bean
DirectExchange TestDirectExchange() {
// return new DirectExchange("TestDirectExchange",true,true);
return new DirectExchange("TestDirectExchange", true, false);
}
/**
* 绑定 将队列和交换机绑定, 并设置用于匹配键:TestDirectRouting
*
* @return
*/
@Bean
Binding bindingDirect() {
return BindingBuilder.bind(Test