为了账号安全,请及时绑定邮箱和手机立即绑定

MQ项目开发实战:新手入门教程

标签:
杂七杂八
概述

本文详细介绍了MQ项目开发实战,从基础概念到项目搭建,再到开发中的常见问题及解决方法。文章还提供了实战案例和性能优化技巧,帮助开发者更好地掌握MQ项目的开发与维护。MQ项目开发实战涵盖了从环境搭建到日常运维的全面指导,旨在帮助新手快速入门并提升实战能力。

MQ项目开发实战:新手入门教程
MQ基础概念介绍

什么是MQ

消息队列(Message Queue,简称MQ)是一种软件系统,利用高效可靠的消息传递机制进行应用之间的交互。在现代软件架构中,MQ常用于异步处理和解耦应用模块。通过引入消息队列,前端应用和服务端应用之间的耦合度降低,增强了系统的可扩展性和可靠性。MQ支持异步通信,这意味着发送消息方无需等待接收方完成处理,从而提高了系统的响应速度。

MQ的基本功能和特点

消息队列的核心功能包括:

  • 异步通讯:消息生产者将消息发送到队列中,无需等待消息被消费,从而提高系统的响应速度。
  • 解耦:消息队列可以在不同的系统组件之间实现解耦,使得各个组件可以独立开发和扩展。
  • 负载均衡:通过消息队列,可以将消息分发到多个消费者,从而实现负载均衡。
  • 可靠传输:消息队列可以保证消息的可靠传输,即使在消息传输过程中出现故障,也可以确保消息能够被正确传递。
  • 持久化:消息队列可以将消息持久化存储,确保在系统重启或故障时,消息不会丢失。

MQ在项目中的应用场景

消息队列在项目中广泛应用于以下场景:

  • 异步任务处理:适用于需要异步处理的任务,例如发送邮件或短信通知,异步的日志记录等。
  • 系统解耦:将系统的不同部分解耦,使得各个部分可以独立运行和扩展。
  • 高并发处理:在高并发场景下,可以将请求分发到多个处理节点,从而提高系统的处理能力。
  • 流量削峰填谷:在系统负载较高时,可以将请求通过消息队列处理,平滑负载。

例如,一个电商网站可能需要处理大量的订单请求。当用户下单后,生成一个订单消息,然后将其发送到消息队列。消息队列可以将消息转发给不同的处理节点,如库存管理、支付处理等,从而实现分布式处理。

MQ项目开发环境搭建

开发环境准备

在搭建开发环境之前,你需要确保你的开发环境满足以下要求:

  • 操作系统:Windows、Linux 或 macOS。
  • 编程语言:Java、Python、C#、Node.js等。
  • 消息队列软件:如Apache Kafka、RabbitMQ、ActiveMQ等。
  • 开发工具:如IntelliJ IDEA、Eclipse、Visual Studio Code等。

推荐使用Linux操作系统,因为它具有更好的性能和稳定性,同时支持多种编程语言和消息队列软件。开发工具方面,Visual Studio Code因其轻量级和跨平台特性而广受开发者欢迎。

MQ软件安装与配置

安装RabbitMQ

以安装RabbitMQ为例,以下是安装RabbitMQ的步骤:

  1. 安装Erlang:RabbitMQ基于Erlang语言构建,因此首先需要安装Erlang。在Ubuntu中,可以使用以下命令安装Erlang:

    sudo apt-get update
    sudo apt-get install erlang
  2. 安装RabbitMQ:安装RabbitMQ,可以使用以下命令:

    sudo apt-get install rabbitmq-server
  3. 启动RabbitMQ:启动服务并设置开机启动:

    sudo systemctl start rabbitmq-server
    sudo systemctl enable rabbitmq-server
  4. 访问管理界面:RabbitMQ提供了一个管理界面,可以通过如下命令启用:

    sudo rabbitmq-plugins enable rabbitmq_management
  5. 访问Web界面:安装完成后,可以通过浏览器访问http://<服务器IP>:15672来查看RabbitMQ的管理界面。默认用户名和密码都是guest

配置RabbitMQ

配置RabbitMQ可以通过命令行或管理界面进行。以下是通过命令行配置的一个示例:

  1. 创建用户:创建一个新的用户,并设置密码:

    sudo rabbitmqctl add_user admin 123456
  2. 设置用户权限:为用户分配权限:

    sudo rabbitmqctl set_user_tags admin administrator
    sudo rabbitmqctl set_permissions -p / admin ".*" ".*" ".*"
  3. 创建Vhost:创建一个虚拟主机:

    sudo rabbitmqctl add_vhost vhost1
  4. 将用户绑定到Vhost
    sudo rabbitmqctl set_user_tags admin administrator
    sudo rabbitmqctl set_permissions -p vhost1 admin ".*" ".*" ".*"

典型MQ库的使用入门

RabbitMQ提供多种语言的客户端库,以下是以Java为例的使用入门:

  1. 添加依赖:在Maven项目中,可以在pom.xml文件中添加RabbitMQ客户端依赖:

    <dependencies>
       <dependency>
           <groupId>com.rabbitmq</groupId>
           <artifactId>amqp-client</artifactId>
           <version>5.15.0</version>
       </dependency>
       <dependency>
           <groupId>org.springframework</groupId>
           <artifactId>spring-amqp</artifactId>
           <version>2.3.0.RELEASE</version>
       </dependency>
    </dependencies>
  2. 配置RabbitMQ连接:创建一个RabbitMQConfig类来配置RabbitMQ连接:

    import org.springframework.amqp.rabbit.connection.ConnectionFactory;
    import org.springframework.amqp.rabbit.connection.CachingConnectionFactory;
    import org.springframework.amqp.rabbit.connection.ConnectionFactory;
    import org.springframework.amqp.rabbit.connection.CachingConnectionFactory;
    
    public class RabbitMQConfig {
       public static ConnectionFactory createConnectionFactory() {
           CachingConnectionFactory factory = new CachingConnectionFactory("localhost");
           factory.setUsername("admin");
           factory.setPassword("123456");
           factory.setVirtualHost("/vhost1");
           return factory;
       }
    }
  3. 发送消息:创建一个MessageProducer类来发送消息:

    import org.springframework.amqp.rabbit.core.RabbitTemplate;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Component;
    
    @Component
    public class MessageProducer {
       @Autowired
       private RabbitTemplate rabbitTemplate;
    
       public void sendMessage(String message) {
           rabbitTemplate.convertAndSend("exchangeName", "routingKey", message);
       }
    }
  4. 接收消息:创建一个MessageConsumer类来接收消息:

    import org.springframework.amqp.rabbit.annotation.RabbitListener;
    import org.springframework.stereotype.Component;
    
    @Component
    public class MessageConsumer {
       @RabbitListener(queues = "queueName")
       public void receiveMessage(String message) {
           System.out.println("Received message: " + message);
       }
    }

以上代码示例展示了如何使用RabbitMQ Java客户端发送和接收消息。通过这种方式,可以将消息发送到指定队列,并在队列中接收消息。

MQ项目开发基础

创建与发布消息

在MQ项目中,创建和发布消息是基础操作。以下是以RabbitMQ为例的代码示例:

  1. 创建一个消息生产者:创建一个Java类MessageProducer,用于发送消息到RabbitMQ:

    import org.springframework.amqp.rabbit.core.RabbitTemplate;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Component;
    
    @Component
    public class MessageProducer {
       @Autowired
       private RabbitTemplate rabbitTemplate;
    
       public void sendMessage(String message) {
           rabbitTemplate.convertAndSend("exchangeName", "routingKey", message);
       }
    }
  2. 配置RabbitMQ连接:在RabbitMQConfig类中配置RabbitMQ连接:

    import org.springframework.amqp.rabbit.connection.ConnectionFactory;
    import org.springframework.amqp.rabbit.connection.CachingConnectionFactory;
    import org.springframework.amqp.rabbit.connection.ConnectionFactory;
    import org.springframework.amqp.rabbit.connection.CachingConnectionFactory;
    
    public class RabbitMQConfig {
       public static ConnectionFactory createConnectionFactory() {
           CachingConnectionFactory factory = new CachingConnectionFactory("localhost");
           factory.setUsername("admin");
           factory.setPassword("123456");
           factory.setVirtualHost("/vhost1");
           return factory;
       }
    }
  3. 发送消息:在主类中调用MessageProducersend方法发送消息:

    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.boot.CommandLineRunner;
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.amqp.rabbit.core.RabbitTemplate;
    import org.springframework.boot.CommandLineRunner;
    
    @SpringBootApplication
    public class Application implements CommandLineRunner {
       @Autowired
       private MessageProducer producer;
    
       public static void main(String[] args) {
           SpringApplication.run(Application.class, args);
       }
    
       @Override
       public void run(String... args) throws Exception {
           producer.sendMessage("Hello, RabbitMQ!");
       }
    }

订阅与接收消息

在MQ项目中,订阅和接收消息是另一项基础操作。以下是以RabbitMQ为例的代码示例:

  1. 创建一个消息消费者:创建一个Java类MessageConsumer,用于接收RabbitMQ中的消息:

    import org.springframework.amqp.rabbit.annotation.RabbitListener;
    import org.springframework.stereotype.Component;
    
    @Component
    public class MessageConsumer {
       @RabbitListener(queues = "queueName")
       public void receiveMessage(String message) {
           System.out.println("Received message: " + message);
       }
    }
  2. 配置RabbitMQ连接:在RabbitMQConfig类中配置RabbitMQ连接:

    import org.springframework.amqp.rabbit.connection.ConnectionFactory;
    import org.springframework.amqp.rabbit.connection.CachingConnectionFactory;
    import org.springframework.amqp.rabbit.connection.ConnectionFactory;
    import org.springframework.amqp.rabbit.connection.CachingConnectionFactory;
    
    public class RabbitMQConfig {
       public static ConnectionFactory createConnectionFactory() {
           CachingConnectionFactory factory = new CachingConnectionFactory("localhost");
           factory.setUsername("admin");
           factory.setPassword("123456");
           factory.setVirtualHost("/vhost1");
           return factory;
       }
    }
  3. 接收消息:在主类中启动应用,消息将被自动接收并处理:

    import org.springframework.boot.CommandLineRunner;
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    
    @SpringBootApplication
    public class Application implements CommandLineRunner {
       public static void main(String[] args) {
           SpringApplication.run(Application.class, args);
       }
    
       @Override
       public void run(String... args) throws Exception {
           // 应用启动后,消息将被自动接收并处理
       }
    }

常见开发问题及解决方法

在使用MQ进行开发时,经常会遇到一些常见的问题,以下是一些典型问题和解决方法:

问题1:消息丢失

问题描述:在消息发送过程中,由于网络问题或其他原因,消息可能会丢失。

解决方法

  • 确认模式:使用RabbitMQ的确认模式。当消息发送到队列后,需要等待确认,确认成功后再进行下一次发送。

    import org.springframework.amqp.rabbit.connection.CorrelationData;
    import org.springframework.amqp.rabbit.core.RabbitTemplate;
    import org.springframework.amqp.rabbit.core.RabbitTemplate.ConfirmCallback;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Component;
    
    @Component
    public class MessageProducer {
      @Autowired
      private RabbitTemplate rabbitTemplate;
    
      public void sendMessage(String message) {
          CorrelationData correlationData = new CorrelationData(UUID.randomUUID().toString());
          rabbitTemplate.setConfirmCallback(confirmCallback);
          rabbitTemplate.convertAndSend("exchangeName", "routingKey", message, correlationData);
      }
    
      private ConfirmCallback confirmCallback = new ConfirmCallback() {
          @Override
          public void confirm(CorrelationData correlationData, boolean ack, String cause) {
              if (ack) {
                  System.out.println("消息发送成功");
              } else {
                  System.out.println("消息发送失败,原因:" + cause);
              }
          }
      };
    }
  • 持久化消息:确保消息在发送到队列前被持久化。
    rabbitTemplate.setDeliveryMode(MessageDeliveryMode.PERSISTENT);

问题2:消息重复

问题描述:在消息消费过程中,消费者可能会重复消费同一条消息。

解决方法

  • 唯一标识:在消息中添加唯一标识,确保消息的唯一性。
    rabbitTemplate.convertAndSend("exchangeName", "routingKey", new Message(UUID.randomUUID().toString(), "Hello, RabbitMQ!"));
  • 幂等性:确保消费者在接收到重复消息时能够保证幂等性,即多次处理同一个消息的结果与处理一次相同。
    @RabbitListener(queues = "queueName")
    public void receiveMessage(String message) {
      if (isMessageProcessed(message)) {
          // 跳过已处理的消息
          return;
      }
      // 处理消息
      System.out.println("Received message: " + message);
      // 标记消息已处理
      markMessageAsProcessed(message);
    }

问题3:性能问题

问题描述:在高并发场景下,消息的发送和接收可能会导致性能问题。

解决方法

  • 增加消费者:增加消费者数量,实现负载均衡,提高消息处理速度。
    @RabbitListener(queues = {"queueName1", "queueName2"})
    public void receiveMessage(String message) {
      System.out.println("Received message: " + message);
    }
  • 优化代码:优化消费者代码,减少消息处理时间。
    @RabbitListener(queues = "queueName")
    public void receiveMessage(String message) {
      // 优化时间复杂度
      System.out.println("Received message: " + message);
    }
MQ项目实战案例

简单消息发送与接收案例

以下是一个简单的消息发送与接收案例,使用RabbitMQ进行实现:

  1. 创建消息生产者

    import org.springframework.amqp.rabbit.core.RabbitTemplate;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Component;
    
    @Component
    public class MessageProducer {
       @Autowired
       private RabbitTemplate rabbitTemplate;
    
       public void sendMessage(String message) {
           rabbitTemplate.convertAndSend("exchangeName", "routingKey", message);
       }
    }
  2. 创建消息消费者

    import org.springframework.amqp.rabbit.annotation.RabbitListener;
    import org.springframework.stereotype.Component;
    
    @Component
    public class MessageConsumer {
       @RabbitListener(queues = "queueName")
       public void receiveMessage(String message) {
           System.out.println("Received message: " + message);
       }
    }
  3. 配置RabbitMQ连接

    import org.springframework.amqp.rabbit.connection.ConnectionFactory;
    import org.springframework.amqp.rabbit.connection.CachingConnectionFactory;
    import org.springframework.amqp.rabbit.connection.ConnectionFactory;
    import org.springframework.amqp.rabbit.connection.CachingConnectionFactory;
    
    public class RabbitMQConfig {
       public static ConnectionFactory createConnectionFactory() {
           CachingConnectionFactory factory = new CachingConnectionFactory("localhost");
           factory.setUsername("admin");
           factory.setPassword("123456");
           factory.setVirtualHost("/vhost1");
           return factory;
       }
    }
  4. 发送消息

    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.boot.CommandLineRunner;
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    
    @SpringBootApplication
    public class Application implements CommandLineRunner {
       @Autowired
       private MessageProducer producer;
    
       public static void main(String[] args) {
           SpringApplication.run(Application.class, args);
       }
    
       @Override
       public void run(String... args) throws Exception {
           producer.sendMessage("Hello, RabbitMQ!");
       }
    }
  5. 接收消息

    import org.springframework.amqp.rabbit.annotation.RabbitListener;
    import org.springframework.stereotype.Component;
    
    @Component
    public class MessageConsumer {
       @RabbitListener(queues = "queueName")
       public void receiveMessage(String message) {
           System.out.println("Received message: " + message);
       }
    }

消息队列模拟订单处理系统

以下是一个简单的订单处理系统模拟案例,使用RabbitMQ进行实现:

  1. 创建订单生产者

    import org.springframework.amqp.rabbit.core.RabbitTemplate;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Component;
    
    @Component
    public class OrderProducer {
       @Autowired
       private RabbitTemplate rabbitTemplate;
    
       public void sendOrder(String orderId) {
           rabbitTemplate.convertAndSend("orderExchange", "orderKey", orderId);
       }
    }
  2. 创建订单消费者

    import org.springframework.amqp.rabbit.annotation.RabbitListener;
    import org.springframework.stereotype.Component;
    
    @Component
    public class OrderConsumer {
       @RabbitListener(queues = "orderQueue")
       public void receiveOrder(String orderId) {
           System.out.println("Processing order: " + orderId);
           // 模拟订单处理逻辑
           System.out.println("Order processed: " + orderId);
       }
    }
  3. 配置RabbitMQ连接

    import org.springframework.amqp.rabbit.connection.ConnectionFactory;
    import org.springframework.amqp.rabbit.connection.CachingConnectionFactory;
    import org.springframework.amqp.rabbit.connection.ConnectionFactory;
    import org.springframework.amqp.rabbit.connection.CachingConnectionFactory;
    
    public class RabbitMQConfig {
       public static ConnectionFactory createConnectionFactory() {
           CachingConnectionFactory factory = new CachingConnectionFactory("localhost");
           factory.setUsername("admin");
           factory.setPassword("123456");
           factory.setVirtualHost("/vhost1");
           return factory;
       }
    }
  4. 发送订单消息

    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.boot.CommandLineRunner;
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    
    @SpringBootApplication
    public class Application implements CommandLineRunner {
       @Autowired
       private OrderProducer producer;
    
       public static void main(String[] args) {
           SpringApplication.run(Application.class, args);
       }
    
       @Override
       public void run(String... args) throws Exception {
           producer.sendOrder("123456");
       }
    }

监控与日志管理的实现

在项目中,监控和日志管理是非常重要的功能,可以确保系统的稳定运行。以下是一个简单的监控和日志管理实现案例,使用RabbitMQ进行实现:

  1. 创建日志生产者

    import org.springframework.amqp.rabbit.core.RabbitTemplate;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Component;
    
    @Component
    public class LogProducer {
       @Autowired
       private RabbitTemplate rabbitTemplate;
    
       public void sendLog(String logMessage) {
           rabbitTemplate.convertAndSend("logExchange", "logKey", logMessage);
       }
    }
  2. 创建日志消费者

    import org.springframework.amqp.rabbit.annotation.RabbitListener;
    import org.springframework.stereotype.Component;
    
    @Component
    public class LogConsumer {
       @RabbitListener(queues = "logQueue")
       public void receiveLog(String logMessage) {
           System.out.println("Received log: " + logMessage);
           // 模拟日志处理逻辑
       }
    }
  3. 配置RabbitMQ连接

    import org.springframework.amqp.rabbit.connection.ConnectionFactory;
    import org.springframework.amqp.rabbit.connection.CachingConnectionFactory;
    import org.springframework.amqp.rabbit.connection.ConnectionFactory;
    import org.springframework.amqp.rabbit.connection.CachingConnectionFactory;
    
    public class RabbitMQConfig {
       public static ConnectionFactory createConnectionFactory() {
           CachingConnectionFactory factory = new CachingConnectionFactory("localhost");
           factory.setUsername("admin");
           factory.setPassword("123456");
           factory.setVirtualHost("/vhost1");
           return factory;
       }
    }
  4. 发送日志消息

    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.boot.CommandLineRunner;
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    
    @SpringBootApplication
    public class Application implements CommandLineRunner {
       @Autowired
       private LogProducer producer;
    
       public static void main(String[] args) {
           SpringApplication.run(Application.class, args);
       }
    
       @Override
       public void run(String... args) throws Exception {
           producer.sendLog("Application started");
       }
    }
MQ项目维护与优化

性能调优技巧

在MQ项目中,性能调优是提高系统响应速度和处理能力的关键。以下是一些性能调优技巧:

  1. 增加消费者数量:增加消费者数量,可以实现负载均衡,提高消息处理速度。

    @RabbitListener(queues = {"queueName1", "queueName2"})
    public void receiveMessage(String message) {
       System.out.println("Received message: " + message);
    }
  2. 优化消费者代码:优化消费者代码,减少消息处理时间。
    @RabbitListener(queues = "queueName")
    public void receiveMessage(String message) {
       // 优化时间复杂度
       System.out.println("Received message: " + message);
    }

3..
...
其他部分保持不变,完整内容如下:

MQ项目维护与优化

性能调优技巧

在MQ项目中,性能调优是提高系统响应速度和处理能力的关键。以下是一些性能调优技巧:

  1. 增加消费者数量:增加消费者数量,可以实现负载均衡,提高消息处理速度。

    @RabbitListener(queues = {"queueName1", "queueName2"})
    public void receiveMessage(String message) {
       System.out.println("Received message: " + message);
    }
  2. 优化消费者代码:优化消费者代码,减少消息处理时间。

    @RabbitListener(queues = "queueName")
    public void receiveMessage(String message) {
       // 应有的优化代码
    }
  3. 使用持久化消息:在高可用场景下,确保消息持久化,减少消息丢失。

    rabbitTemplate.setDeliveryMode(MessageDeliveryMode.PERSISTENT);
  4. 使用批处理:在消息量较大时,可以批量处理消息,减少网络请求次数。
    rabbitTemplate.convertAndSend("exchangeName", "routingKey", new Message(UUID.randomUUID().toString(), "Hello, RabbitMQ!"));

常见故障排查与处理

在MQ项目中,常见的故障包括连接失败、消息丢失、性能瓶颈等。以下是一些故障排查和处理方法:

  1. 连接失败

    • 检查网络连接:确保MQ服务的IP和端口正确。
    • 检查服务状态:确保MQ服务已启动。
    • 检查配置文件:确保配置文件中的连接信息正确。
  2. 消息丢失

    • 确认模式:使用RabbitMQ的确认模式,确保消息发送成功。
    • 持久化消息:确保消息在发送前被持久化。
    • 重试机制:在消息处理失败时,实现重试机制。
  3. 性能瓶颈
    • 增加消费者数量:增加消费者数量,实现负载均衡。
    • 优化消费者代码:优化消费者的代码,减少消息处理时间。
    • 使用批处理:批量处理消息,减少网络请求次数。

日常运维注意事项

在MQ项目的日常运维中,需要注意以下几个方面:

  1. 监控系统状态:使用监控工具定期检查MQ服务的状态,确保服务正常运行。
  2. 备份数据:定期备份MQ中的数据,防止数据丢失。
  3. 日志管理:定期检查日志文件,及时发现和处理问题。
  4. 性能优化:根据实际运行情况,定期进行性能优化,提高系统性能。
总结与展望

MQ项目开发心得

在MQ项目开发过程中,需要注意以下几个要点:

  1. 清晰的架构设计:确保MQ在架构中的定位清晰,避免不必要的复杂性。
  2. 消息格式一致:确保消息格式的一致性,避免消息处理过程中的问题。
  3. 异常处理:实现必要的异常处理机制,确保系统的稳定运行。
  4. 性能优化:根据实际运行情况,定期进行性能优化,提高系统性能。

MQ技术的未来趋势

MQ技术在未来的发展趋势主要包括以下几个方面:

  1. 云原生集成:MQ技术将进一步与云原生技术集成,支持更多的云平台。
  2. 容器化:MQ将更加容器化,支持在Docker等容器中运行。
  3. 微服务集成:MQ将更加紧密地集成到微服务架构中,提高微服务的通信效率。
  4. 智能运维:MQ将进一步集成智能运维技术,实现自动化的运维管理。

进一步学习与实践建议

  1. 深入学习MQ原理:了解MQ的内部原理,熟悉消息队列的实现机制。
  2. 学习更多MQ工具:除了RabbitMQ,还可以学习其他MQ工具,如Kafka、ActiveMQ等。
  3. 实践项目开发:通过实际项目开发,提升MQ开发能力,积累实战经验。
  4. 参加培训课程:可以参加慕课网等线上平台提供的MQ培训课程,快速提升技能。
  5. 阅读官方文档:阅读MQ官方文档,及时获取最新的技术信息和最佳实践。
点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消