0


RabbitMQ基础

1同步调用

按照123的顺序依次执行

如果每个业务都用50ms,呢么整个支付服务完成,则需要的时间是几个小demo的时间加和

所以同步调用会出现 扩展性差 性能下降 级联失败(一个小demo失效了,整个业务都失效了)的问题,但是某些业务只能使用同步调用

2异步调用

这里的消息代理类比于外卖柜,消息发送者类比于外卖员,消息接受者类比于点外卖的人

更改为异步调用就如下

3RabbitMQ介绍

使用docker安装

docker run
-e RABBITMQ DEFAULT USER=itheima\ 这里设置用户名和密码
-e RABBITMO DEFAULT PASS=123321\
-v mq-plugins:/plugins
--name mq\
--hostname mq\
-p15672:15672\
-p5672:56721
--network hmall\
-d\
rabbitmq:3.8-management

安装完成后 访问192.168.150.101:15672

基本模型

4入门

创建队列

交换机负责路由转发

此时再看queue里边 已经和交换机绑定

1数据隔离

通过virtual host

创建一个用户

不同的virtual host对数据隔离

2 spring amqp

5 hello word 案例

没有交换机

** 1引入spring-amgp依赖**

<!--AMQP依赖包含RabbitMQ-->
<dependency>
<groupId>org.springframework.boot/groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>

2配置RabbitMQ服务端信息

3发送消息

@SpringBootTest
public class SpringAmqpTest
@Autowired
private RabbitTemplate rabbitTemplate;
@Test
void testSendMessage2Queue(){
String queueName "simple.queue";
String msg "hello,amqp!";
rabbitTemplate.convertAndSend (queueName,msg);
}

4接收消息

@Slf4j
@Component
public class MqListener
@RabbitListener (queues "simple.queue")
public void listensimpleQueue(string msg){
System.out.println("消费者收到了simple.queuel的消息:【"+msg+"】r);
}

6 Work Queues

收消息

@RabbitListener(queues "work.queue")
public void listenworkQueuel(String msg){
System.out.println("消费者1收到了work.queue的消息:【"+msg+"】");
}
@RabbitListener (queues "work,queue")
public void listenworkQueue2(String msg){
System.out.println("消费者2收到了work.queue的消息:【"+msg+"】");
}

发消息

@Test
void testworkQueue(){
String queueName "work.queue";
for (int i 1;i <50;i++){
String msg hello,worker,message_+i;
rabbitTemplate.convertAndSend(queueName,msg);
  }
}

实现能者多劳

7交换机

1Fanout交换机

** 广播模式**

创建队列

可以使用默认的交换机也可以自己创建交换机

交换机与队列进行绑定

2Direct交换机

绑定key

接收

发送

@Test
void testSendDirect(){
String exchangeName ="hmall direct";
string msg="红色警报";
rabbitTemplate.convertAndSend(exchangeName,routingKey:"red",msg);
}

3Topic交换机

4Topic交换机

topic能干的事direct也能干,但是topic更加方便

5申明队列和交换机

代码实现 不使用可视化

基于代码

基于注解(这个更好用 更便利 更能适合于场景)

6消息转换器

Spring的对消息对象的处理是由org.springframework.amqp.support.converter.MessageConverter来处理的。而
默认实现是SimpleMessageConverter,基于JDK的ObjectOutputStream完成序列化。
存在下列问题:
·JDK的序列化有安全风险
·DK序列化的消息太大
·JDK序列化的消息可读性差

解决方案:

标签: rabbitmq 分布式

本文转载自: https://blog.csdn.net/iiiiiaaaaa337/article/details/136242588
版权归原作者 先生先生393 所有, 如有侵权,请联系我们删除。

“RabbitMQ基础”的评论:

还没有评论