0
点赞
收藏
分享

微信扫一扫

RabbitMQ之MQ可靠性

小布_cvg 2024-01-21 阅读 31

 

一、MQ的简介

1. 什么是MQ(概念简述) 

2. MQ的主要应用场景

MQ典型的应用场景
应用场景说明
解耦系统组件允许不同组件之间解耦,降低了组件之间的依赖性。
提高系统可靠性如果某个组件暂时不可用,消息队列可以存储消息,待组件恢复正常后再处理这些消息。
异步通信允许系统中的组件进行异步通信,提高了系统的响应性。
削峰填谷在流量波动较大的场景中,消息队列可以用来平滑流量,防止系统峰值负载。
分布式系统协调在分布式系统中,消息队列可以用来协调各个节点的工作。

3. MQ的常见实现方式

3.1 RabbitMQ

1. 特点
2. 适用场景

3.2 Apache Kafka 

1. 特点
2. 适用场景

3.3 ActiveMQ

1. 特点
2. 适用场景

3.4 Apache RocketMQ接口

1. 特点
2. 适用场景

3.5 Amazon Simple Queue Service (SQS)

1. 特点
2. 适用场景

3.6 Redis 发布/订阅 

1. 特点
2. 适用场景

         这些是一些常见的MQ实现方式,选择合适的MQ取决于应用的具体需求,包括对性能、可靠性、消息传递模式的要求等。

图解说明

4. MQ作用说明(含图解)

createOrder(...) {
// 完成订单服务
doCreateOrder(...);
// 调用其他服务接口
sendMsg(...);
updateUserInterestedGoods(...);
updateMemberCreditInfo(...);
}

二、 RabbitMQ

1. 组成部分

 图解

三、Docker安装部署RabbitMQ

1. 拉取RabbitMQ镜像文件

2. 安装部署RabbitMq容器

docker run -d \
--name my-rabbitmq \
-p 5672:5672 -p 15672:15672 \
--hostname my-rabbitmq-host \
-e RABBITMQ_DEFAULT_VHOST=my_vhost \
-e RABBITMQ_DEFAULT_USER=admin \
-e RABBITMQ_DEFAULT_PASS=admin \
--restart=always \
rabbitmq:management

 

3. 配置RabbitMq

四、springboot连接配置RabbitMQ

1. 创建项目

2. 修改配置文件 

 publisher/application.yml

server:
    port: 9999
spring:
  rabbitmq:
#      安装rabbitMq容器的虚拟机的ip地址
      host: 192.168.52.130
      #      Rabbitmq的用户账号
      username: yxspring
#      Rabbitmq的用户密码
      password: 123456
#            Rabbitmq的容器的端口号
      port: 5672
#       RabbitMq的主机
      virtual-host: my_vhost

consumer/application.yml

server:
    port: 8888
spring:
    rabbitmq:
        #      安装rabbitMq容器的虚拟机的ip地址
        host: 192.168.52.130
        #      Rabbitmq的用户账号
        username: yxspring
        #      Rabbitmq的用户密码
        password: 123456
        #            Rabbitmq的容器的端口号
        port: 5672
        #       RabbitMq的主机
        virtual-host: my_vhost

3. 案例演示

发布者

 RabbitConfig.java
package com.yx.publisher;

import org.springframework.amqp.core.Queue;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
@SuppressWarnings("all")
public class RabbitConfig {
@Bean
public Queue firstQueue() {
return new Queue("firstQueue");
}

}

 TestController.java
package com.yx.publisher;

import org.springframework.amqp.core.AmqpTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * com.yx.publisher
 *
 * @author 君易--鑨
 * @site www.yangxin.com
 * @company 木易
 * @create 2024/1/19
 */
@RestController
public class TestController {

//        注入AmqpTemplate
        @Autowired
        private AmqpTemplate amqpTemplate;
//        编写一个请求方法
    @RequestMapping("/send1")
    public String send1(){
//    向交换机发送消息
        amqpTemplate.convertAndSend("firstQueue","木易");
        return "木易";
    }


}

消费者

Receiver.java
package com.yx.consumer;

import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.rabbit.annotation.RabbitHandler;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;

@Component
@SuppressWarnings("all")
@Slf4j
@RabbitListener(queues = "firstQueue") //接收的队列
public class Receiver {
@RabbitHandler
public void process(String msg) {
log.warn("接收到:" + msg);
}
}

 实例讲解

User.java
package com.yx.publisher;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@SuppressWarnings("all")
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User{
private String username;
private String userpwd;
}

 PojoReceiver.java
package com.yx.consumer;

import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.rabbit.annotation.RabbitHandler;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;

@Component
@SuppressWarnings("all")
@Slf4j
@RabbitListener(queues = "secondQueue") //接收的队列
public class PojoReceiver {
@RabbitHandler
public void process(User user) {
log.warn("接收到:" + user);
}
}

 

 

 解决实体传输方案一:将对象转换成json的格式
发布者

 消费者


举报

相关推荐

0 条评论