墨风如雪博客

  • 源码小店
  • 导航站
  • 登录
  • java
  • 资源分享
让AI使用变得如此简单
  1. 首页
  2. java
  3. RabbitMQ
  4. 正文

java 消息队列框架RabbitMQ的(超详细总结)

2023年 5月 4日 164点热度 0人点赞 0条评论

RabbitMQ是什么?

Java RabbitMQ是一种开源的消息中间件(message broker),它实现了高效的AMQP(Advanced Message Queuing Protocol)协议,用于实现分布式系统中的消息异步传输。RabbitMQ是一个高可用、高性能、易于部署和可伸缩的消息代理系统,具有很强的灵活性,可以帮助开发者在分布式系统中实现消息传递,从而解决系统之间的数据通信和协作问题。

RabbitMQ是一个轻量级的消息代理系统,可以在多种操作系统和语言平台上运行。RabbitMQ的核心设计理念是“生产者”和“消费者”的模型,在此模型下,生产者可以将消息发送到RabbitMQ代理系统中的消息队列(message queue),而消费者可以从队列中获取消息并进行处理。

RabbitMQ可以帮助开发者实现以下功能:

  1. 消息排队(Queueing):将消息存储在消息队列中,并按照先进先出(FIFO)原则进行排队。

  2. 消息路由(Routing):将消息发送到特定的队列或交换器(exchange),以便消费者可以从特定的队列或交换器中获取消息。

  3. 消息确认(Acknowledgement):确认消息已经被消费者处理成功,并通知生产者删掉该消息。

  4. 消息持久化(Durable message):即使系统发生故障,也能保证消息得到不丢失。

  5. 发布/订阅模式(Publish/Subscribe):让多个消费者可以同时订阅一个队列或交换器,并接收到相同的消息。

  6. Topic模式(Topic):根据消息的标签(Tag)进行筛选,只有与标签匹配的消费者才会接收到消息。

  7. 请求/响应模式(Request/Response):允许生产者发送请求消息并等待消费者的响应消息。

RabbitMQ是一种可靠的、高效的、易于部署的消息代理系统,它将消息的生产和消费进行了完整的解耦,增加了分布式系统的灵活性和可伸缩性,并在很多场景下取代传统的基于HTTP协议的通信方式,成为实现分布式系统之间高效通信的首选方案之一。

RabbitMQ在Windows和Linux的安装方法

RabbitMQ在Windows和Linux系统上的安装教程步骤如下:

在Windows上安装RabbitMQ:

  1. 下载Erlang安装包:

    下载地址:https://www.erlang.org/downloads

    选择适合你操作系统的安装包进行下载(32位或64位)。

  2. 安装Erlang:

    双击下载的安装包,按照向导进行安装。

  3. 下载RabbitMQ安装包:

    下载地址:https://www.rabbitmq.com/download.html

    选择适合你操作系统的安装包进行下载。

  4. 安装RabbitMQ:

    双击下载的安装包,按照向导进行安装。安装过程中要记住设置用户名和密码。

  5. 启动RabbitMQ:

    打开命令提示符,进入RabbitMQ安装目录的sbin文件夹,输入以下命令启动RabbitMQ服务:

rabbitmq-server.bat start

如果命令行界面输出了

RabbitMQ started without errors

说明RabbitMQ已经启动。

在Linux上安装RabbitMQ:

  1. 安装Erlang:

    在终端输入以下命令:

   sudo apt-get update
   sudo apt-get install erlang
  1. 添加RabbitMQ官方APT存储库的签名到你的系统:

    在终端中输入以下命令:

   wget -O- https://www.rabbitmq.com/rabbitmq-release-signing-key.asc | sudo apt-key add -
  1. 添加RabbitMQ官方APT存储库:

    在终端中输入以下命令:

   sudo apt-get install apt-transport-https
   echo "deb https://dl.bintray.com/rabbitmq/debian $(lsb_release -sc) main" | sudo tee /etc/apt/sources.list.d/bintray.rabbitmq.list
   sudo apt-get update
  1. 安装RabbitMQ:

    在终端中输入以下命令:

   sudo apt-get install rabbitmq-server
  1. 启动RabbitMQ服务:

    在终端中输入以下命令:

   sudo service rabbitmq-server start

至此,RabbitMQ在Windows和Linux上安装完成。

代码示例:

Java连接RabbitMQ的示例代码如下:

import com.rabbitmq.client.ConnectionFactory;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.Channel;

public class Send {

  private final static String QUEUE_NAME = "hello";

  public static void main(String[] argv) throws Exception {
    ConnectionFactory factory = new ConnectionFactory();
    factory.setHost("localhost");
    try (Connection connection = factory.newConnection();
         Channel channel = connection.createChannel()) {
      channel.queueDeclare(QUEUE_NAME, false, false, false, null);
      String message = "Hello World!";
      channel.basicPublish("", QUEUE_NAME, null, message.getBytes());
      System.out.println(" [x] Sent '" + message + "'");
    }
  }
}

上述代码演示了如何向名为"hello"的队列发送一个字符串消息"Hello World!"。

SpringBoot整合RabbitMQ

Spring Boot可以很方便地实现和RabbitMQ的整合。下面是实现Spring Boot整合RabbitMQ的步骤和配置代码:

步骤1:添加依赖

在Maven项目中,需要在pom.xml文件中添加以下依赖:

<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-amqp</artifactId>
</dependency>

步骤2:配置连接信息

在Spring Boot项目中,RabbitMQ的连接信息可以在application.properties文件中进行配置。例如:

spring.rabbitmq.host=localhost
spring.rabbitmq.port=5672
spring.rabbitmq.username=guest
spring.rabbitmq.password=guest

步骤3:定义消息实体类

在RabbitMQ中需要传递的消息可以定义成一个POJO对象,例如:

public class User {
    private String name;
    private int age;

    // getter和setter方法省略
}

步骤4:定义消息发送者

在Spring Boot中,可以使用RabbitTemplate类实现消息的发送。可以在Spring配置类中创建RabbitTemplate实例,并定义消息发送的方法,例如:

@Configuration
public class RabbitConfig {

    @Bean
    public RabbitTemplate rabbitTemplate(ConnectionFactory connectionFactory){
        RabbitTemplate rabbitTemplate = new RabbitTemplate();
        rabbitTemplate.setConnectionFactory(connectionFactory);
        return rabbitTemplate;
    }

    @Bean
    public Queue helloQueue() {
        return new Queue("hello");
    }

}
  • rabbitTemplate方法用于创建RabbitTemplate实例。
  • helloQueue方法用于创建队列。队列的名字为hello。

定义完以上两个方法后就可以创建发送消息的方法,例如:

@Service
public class Sender {

    @Autowired
    private RabbitTemplate rabbitTemplate;

    @Autowired
    private Queue helloQueue;

    public void send() {
        User user = new User();
        user.setName("张三");
        user.setAge(20);
        rabbitTemplate.convertAndSend(helloQueue.getName(), user);
    }
}

步骤5:定义消息接收者

定义消息接收者需要在Spring配置类中创建SimpleMessageListenerContainer实例,并设置MessageListenerAdapter为消息监听器。例如:

@Configuration
public class RabbitConfig {

    @Autowired
    private Queue helloQueue;

    @Autowired
    private Receiver receiver;

    @Bean
    public SimpleMessageListenerContainer messageListenerContainer(ConnectionFactory connectionFactory) {
        SimpleMessageListenerContainer messageListenerContainer = new SimpleMessageListenerContainer();
        messageListenerContainer.setConnectionFactory(connectionFactory);
        messageListenerContainer.setQueues(helloQueue);
        messageListenerContainer.setMessageListener(new MessageListenerAdapter(receiver, "receive"));
        return messageListenerContainer;
    }
}
  • messageListenerContainer方法用于创建SimpleMessageListenerContainer实例,并设置监听helloQueue队列。
  • MessageListenerAdapter是消息监听器的适配器类,用于将接收到的消息转换为Receiver类中的接收方法。

定义完以上方法后就可以创建消息接收者的类。例:

@Service
public class Receiver {

   @RabbitListener(queues = "hello")
   public void receive(User user) {
       System.out.println("Receiver:" + user.getName() + " - " + user.getAge());
   }
}

接收者类中的@RabbitListener注解用于监听队列,当消息到达队列时,会执行receive方法。

上述代码实现了一个最简单的Spring Boot和RabbitMQ整合的实例,完整代码如下:

User.java

public class User {
    private String name;
    private int age;

    // getter和setter方法省略
}

RabbitConfig.java

@Configuration
public class RabbitConfig {

    @Bean
    public RabbitTemplate rabbitTemplate(ConnectionFactory connectionFactory){
        RabbitTemplate rabbitTemplate = new RabbitTemplate();
        rabbitTemplate.setConnectionFactory(connectionFactory);
        return rabbitTemplate;
    }

    @Bean
    public Queue helloQueue() {
        return new Queue("hello");
    }

    @Autowired
    private Queue helloQueue;

    @Autowired
    private Receiver receiver;

    @Bean
    public SimpleMessageListenerContainer messageListenerContainer(ConnectionFactory connectionFactory) {
        SimpleMessageListenerContainer messageListenerContainer = new SimpleMessageListenerContainer();
        messageListenerContainer.setConnectionFactory(connectionFactory);
        messageListenerContainer.setQueues(helloQueue);
        messageListenerContainer.setMessageListener(new MessageListenerAdapter(receiver, "receive"));
        return messageListenerContainer;
    }

}

Sender.java

@Service
public class Sender {

    @Autowired
    private RabbitTemplate rabbitTemplate;

    @Autowired
    private Queue helloQueue;

    public void send() {
        User user = new User();
        user.setName("张三");
        user.setAge(20);
        rabbitTemplate.convertAndSend(helloQueue.getName(), user);
    }
}

Receiver.java

@Service
public class Receiver {

   @RabbitListener(queues = "hello")
   public void receive(User user) {
       System.out.println("Receiver:" + user.getName() + " - " + user.getAge());
   }
}

在上述代码中,RabbitListener注解用于标识消息接收者中的方法,Spring Boot会自动监听hello队列并调用receive方法。

本作品采用 知识共享署名 4.0 国际许可协议 进行许可
标签: RabbitMQ 教程 消息队列 详解
最后更新:2023年 5月 4日

墨风如雪

一个热爱生活,热爱分享的程序员

打赏 点赞

文章评论

您需要 登录 之后才可以评论

墨风如雪

一个热爱生活,热爱分享的程序员

最新 热点 随机
最新 热点 随机
告别机械感!OpenAudio S1让AI声音活起来 Sora触手可及!微软必应AI视频生成器,全民创作时代来临? 阿里WebAgent开源:引领自主搜索新纪元 重磅炸弹!字节跳动开源BAGEL:70亿参数,统一多模态理解与生成,AI“全能王”诞生记! 小米MiMo-VL:7B参数,怎么就成了多模态界的“越级打怪王”? 炸裂!DeepSeek 8B 量化版降临:告别显存焦虑,你的 3080 Ti 也能玩转顶级大模型了!
AI圈炸锅了!Mistral Medium 3:性能 SOTA,成本打骨折,企业玩家的新宠?字节终于开源“扣子”同款引擎了!FlowGram:AI 时代的可视化工作流利器告别“微信黑箱”!Chatlog:让你的聊天记录也能拥有“AI大脑”!字节跳动 Seed-Coder-8B:不靠人工洗数据,这80亿参数的小模型如何写出顶尖代码?85倍速的视觉革命:苹果发布 FastVLM,让你的 iPhone ‘看图说话’,快到飞起!告别AI视频“变脸怪”!腾讯混元Hunyuan Custom重磅开源,主体一致性“王炸”来了!
Manus Agent:席卷全网的“神器”,还是又一场AI热潮? Gemini 2.5:AI界的“记忆之王”是如何炼成的? 谷歌下场,寸草不生?Firebase Studio 挥舞 AI 大棒,誓要统一开发者江湖! Redis String 数据结构:基础操作、进阶应用和性能优化 不只靠“堆参数”:Qwen新突破ParScale,用“并行”让模型更聪明 阿里云放大招!能看懂图片还会聊天的AI来了,Qwen2.5-VL深度解析
标签聚合
spring 设计模式 java 动态规划 AI 教程 算法 deepseek

COPYRIGHT © 2023 墨风如雪博客. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang

免责声明 - 隐私政策