MQ

MQ

一.同步与异步

同步:

顺序执行,下一步为阻塞状态

image-20220915093405778

优点:可以得到即使结果

缺点:

1.执行效率低

2.可能产生级联失败(某一步失败回滚)的结果

3.耦合度高

查找居多

异步:

没有先后顺序

可以理解为子线程处理先后没有要求的事情

增删改居多

二.种类

RabbitMQ(使用率高)\RocketMQ\Kafka(大数据通常使用)

概述:消息中间件

MQ容器的运行命令:

docker run \
 -e RABBITMQ_DEFAULT_USER=itcast \
 -e RABBITMQ_DEFAULT_PASS=123321 \
 -v mq-plugins:/plugins \
 --name mq \
 --hostname mq \
 --restart=always \
 -p 15672:15672 \
 -p 5672:5672 \
 -d \
 rabbitmq:3-management

消息模型:

image-20220915101733476

三.基本代码

3.1快速入门

生产者:

1.创建连接工厂(先要连接上)

2.设置具体参数

分别是:主机名、端口号、vhost(设置虚拟主机。参数: virtualHost - 连接到代理时使用的虚拟主机)、用户名、密码

3.获取连接

4.创建通道

5.声明队列

5个参数的含义

队列名称\是否持久化\独占 - 如果我们声明一个独占队列,则为真(仅限于此连接)\自动删除 – 如果我们声明自动删除队列,则为 true(服务器将在不再使用时将其删除)\参数 – 队列的其他属性(构造参数)

6.发送消息

参数的含义:

交换 ― 将消息发布到的交换\routingKey – 路由键\props - 消息的其他属性 - 路由标头等\正文 - 消息正文

7.关闭通道和连接

image-20220915105922223

消费者:

到声明队列和生产者一致

三个参数含义:消费队列,是否签收,怎么回调

queue – 队列的名称
autoAck – 如果服务器应考虑消息在传递后确认,则为 true;如果服务器应该期待明确的确认,则为 false
回调——消费者对象的接口

消息标签/额外扩展参数(唯一tag)/和前者类似(唯一标识)/消息体

重写方法的含义:

image-20220915110421223

image-20220915115423085

四.特殊情况

错误记录:

image-20220915122845060

@Qualifier注解:

默认情况下,@Autowired 按类型装配 Spring Bean
如果容器中有多个相同类型的 bean,则框架将抛出 NoUniqueBeanDefinitionException, 以提示有多个满足条件的 bean 进行自动装配。

通过使用 @Qualifier 注解,我们可以消除需要注入哪个 bean 的问题。让我们重新回顾一下前面的例子,看看我们如何通过包含 @Qualifier 注释来指出我们想要使用哪个 bean 来解决问题

   @Component    
   public class FooService {        
   @Autowired        
   @Qualifier("fooFormatter")       
   private Formatter formatter;
   //todo     
   }

小写变大写:

ctrl +shirt + u

posted @ 2022-09-17 09:30  wzztg  阅读(131)  评论(0)    收藏  举报