当前位置: 首页 > article >正文

消息队列MQ(RabbitMQ)

在现代软件架构中,消息队列(Message Queue,简称MQ)是一种非常重要的中间件,广泛应用于分布式系统、微服务架构以及异步通信场景中。消息队列通过允许应用程序之间通过消息进行通信,从而实现解耦、提高系统的可扩展性和可靠性。本文将介绍消息队列的基本概念、常见实现方式,并通过一个简单的Java示例来展示如何使用消息队列。

消息Broker,目前常见的实现方案就是消息队列(MessageQueue),简称为MQ.

目比较常见的MQ实现:

  • ActiveMQ
  • RabbitMQ
  • RocketMQ
  • Kafka

  

RabbitMQActiveMQRocketMQKafka
公司/社区RabbitApache阿里Apache
开发语言ErlangJavaJavaScala&Java
协议支持AMQP,XMPP,SMTP,STOMPOpenWire,STOMP,REST,XMPP,AMQP自定义协议自定义协议
可用性一般
单机吞吐量一般非常高
消息延迟微秒级毫秒级毫秒级毫秒以内
消息可靠性一般一般

 

追求可用性:Kafka、 RocketMQ 、RabbitMQ

追求可靠性:RabbitMQ、RocketMQ

追求吞吐能力:RocketMQ、Kafka

追求消息低延迟:RabbitMQ、Kafka

RabbitMQ: One broker to queue them all | RabbitMQhttps://www.rabbitmq.com/ 安装过后,有几个专有名称需要知道

  • publisher:生产者,也就是发送消息的一方

  • consumer:消费者,也就是消费消息的一方

  • queue:队列,存储消息。生产者投递的消息会暂存在消息队列中,等待消费者处理

  • exchange:交换机,负责消息路由。生产者发送的消息由交换机决定投递到哪个队列。

  • virtual host:虚拟主机,起到数据隔离的作用。每个虚拟主机相互独立,有各自的exchange、queue

依赖

<dependency>
    <groupId>com.rabbitmq</groupId>
    <artifactId>amqp-client</artifactId>
    <version>5.14.2</version>
</dependency>

 

消息发送

首先配置MQ地址,在publisher服务的application.yml中添加配置:

spring:
  rabbitmq:
    host:  # 你的虚拟机IP
    port: # 端口
    virtual-host: # 虚拟主机
    username: # 用户名
    password: # 密码

然后在publisher服务中编写测试类SpringAmqpTest,并利用RabbitTemplate实现消息发送:



import org.junit.jupiter.api.Test;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
public class SpringAmqpTest {

    @Autowired
    private RabbitTemplate rabbitTemplate;

    @Test
    public void testSimpleQueue() {
        // 队列名称
        String queueName = "simple.queue";
        // 消息
        String message = "hello, spring amqp!";
        // 发送消息
        rabbitTemplate.convertAndSend(queueName, message);
    }
}

消息接收

首先配置MQ地址,在consumer服务的application.yml中添加配置:

spring:
  rabbitmq:
    host:  # 你的虚拟机IP
    port: # 端口
    virtual-host: # 虚拟主机
    username: # 用户名
    password: # 密码


import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;

@Component
public class SpringRabbitListener {
        // 利用RabbitListener来声明要监听的队列信息
    // 将来一旦监听的队列中有了消息,就会推送给当前服务,调用当前方法,处理消息。
    // 可以看到方法体中接收的就是消息体的内容
    @RabbitListener(queues = "simple.queue")
    public void listenSimpleQueueMessage(String msg) throws InterruptedException {
        System.out.println("spring 消费者接收到消息:【" + msg + "】");
    }
}


http://www.kler.cn/a/578913.html

相关文章:

  • 2025-3-9哈弗曼树
  • OPENGLPG第九版学习 -颜色、像素和片元 PART1
  • python flask
  • 跨越时空的对话:图灵与GPT-4聊AI的前世今生
  • 在MATLAB环境中,对矩阵拼接(Matrix Concatenation)的测试
  • 【 <一> 炼丹初探:JavaWeb 的起源与基础】之 JSP 中的内置对象:request、response、session 的使用示例
  • JVM 的OOM问题
  • Hadoop的运行模式
  • VTK笔记- 3D Widget类 vtkSplineWidget 样条部件
  • MySQL 数据归档自动化:Python + pt-archiver 打造高效运维利器
  • 【DuodooTEKr】Odoo 18设备管理双剑客:Maintenance设备模块与IOT模块的深度解析与实践
  • 【Linux】详谈 基础I/O
  • 供应链重构:制造业如何借助数字化提升响应速度?
  • docker启动jenkins,jenkins中调用docker
  • 学网络安全可以考取哪些证书?
  • Llama-Factory框架下的Meta-Llama-3-8B-Instruct模型微调
  • 如何在语言模型的参数中封装知识?——以T5模型为例
  • Navigation的进阶知识与拦截器配置
  • Matlab:矩阵运算篇——矩阵数学运算
  • docker compose 以redis为例