RabbitMQ基础

目录

1同步调用

2异步调用

 3RabbitMQ介绍

4入门 

1数据隔离

2 spring amqp 

5 hello word 案例

 1引入spring-amgp依赖

 2配置RabbitMQ服务端信息

3发送消息

4接收消息

6 Work Queues

7交换机

1Fanout交换机

创建队列

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

​编辑 交换机与队列进行绑定

​编辑 2Direct交换机

3Topic交换机

4Topic交换机 

5申明队列和交换机 

6消息转换器


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序列化的消息可读性差

解决方案:

  • 34
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值