rabbitMQ

RabbitMQ 是一个开源的消息中间件,它实现了 AMQP(Advanced Message Queuing Protocol)协议,是一个可靠的、强大的分布式消息队列系统。

RabbitMQ 的主要特点包括:

  1. 可靠性:RabbitMQ 提供了持久化、消息确认、消息重试等机制,确保消息在发送、接收过程中不会丢失,可以保证系统的高可用性和可靠性。

  2. 灵活性:RabbitMQ 支持多种消息模式,包括点对点模式、发布/订阅模式、RPC(Remote Procedure Call)等。可以根据不同的应用场景选择合适的消息模式。

  3. 高性能:RabbitMQ 使用 Erlang 语言编写,具有优秀的并发性能和轻量级进程模型,能够处理高并发的消息传递。

  4. 易用性:RabbitMQ 提供了丰富的客户端库和可视化界面,方便开发人员进行消息的发送和接收,管理和监控队列等操作。

  5. 扩展性:RabbitMQ 支持集群部署,可以通过增加节点来扩展系统的处理能力,同时还支持插件机制,可以根据需要进行功能的扩展和定制。

RabbitMQ 可以广泛应用于分布式系统、微服务架构、消息驱动的应用等场景,提供了可靠的消息传递机制,帮助开发人员构建可靠、高性能的应用系统。

使用 IDEA 实现 RabbitMQ 的步骤:

打开 IDEA 并创建一个新的 Java 项目。

在项目的 pom.xml 文件中添加 RabbitMQ 的依赖,例如:

xml 复制代码
<dependencies>
    <dependency>
        <groupId>com.rabbitmq</groupId>
        <artifactId>amqp-client</artifactId>
        <version>5.12.0</version>
    </dependency>
</dependencies>

在代码中创建一个 RabbitMQ 的连接和通道,例如:

java 复制代码
import com.rabbitmq.client.ConnectionFactory;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.Channel;
 
public class RabbitMQExample {
    private final static String QUEUE_NAME = "hello";
 
    public static void main(String[] args) throws Exception {
        // 创建连接工厂
        ConnectionFactory factory = new ConnectionFactory();
        factory.setHost("localhost"); // RabbitMQ 服务器的地址
 
        // 创建连接
        Connection connection = factory.newConnection();
 
        // 创建通道
        Channel channel = connection.createChannel();
 
        // 声明队列
        channel.queueDeclare(QUEUE_NAME, false, false, false, null);
 
        // 发送消息
        String message = "Hello, RabbitMQ!";
        channel.basicPublish("", QUEUE_NAME, null, message.getBytes("UTF-8"));
        System.out.println("发送消息: " + message);
 
        // 关闭通道和连接
        channel.close();
        connection.close();
    }
}

在 RabbitMQ 中,使用 rabbitTemplate 是一种方便的方式来发送和接收消息。rabbitTemplate 是 RabbitMQ 提供的一个高级 API,它封装了与 RabbitMQ 交互的细节,简化了发送和接收消息的操作。

rabbitTemplate 的步骤:

添加 RabbitMQ 的依赖。在你的项目的 pom.xml 文件中添加以下依赖:

xml 复制代码
<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-amqp</artifactId>
    </dependency>
</dependencies>

创建配置类,配置 RabbitMQ 的连接信息。在你的 Spring Boot 项目中,创建一个配置类,例如 RabbitMQConfig.java,并配置 RabbitMQ 的连接信息,例如:

java 复制代码
import org.springframework.amqp.rabbit.connection.ConnectionFactory;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class RabbitMQConfig {
    
    @Bean
    public RabbitTemplate rabbitTemplate(ConnectionFactory connectionFactory) {
        RabbitTemplate rabbitTemplate = new RabbitTemplate(connectionFactory);
        // 可以设置相关的属性,例如消息的序列化方式、消息的确认模式等
        // rabbitTemplate.setXXX();
        return rabbitTemplate;
    }
}

在需要发送消息的地方注入 rabbitTemplate,并使用它发送消息。例如,在一个服务类中,你可以注入 rabbitTemplate 并使用它发送消息,例如:

java 复制代码
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class RabbitMQService {
    
    @Autowired
    private RabbitTemplate rabbitTemplate;
    
    public void sendMessage(String exchange, String routingKey, Object message) {
        rabbitTemplate.convertAndSend(exchange, routingKey, message);
    }
}

在需要接收消息的地方注入 rabbitTemplate,并使用它接收消息。例如,在一个消息监听器类中,你可以注入 rabbitTemplate 并使用它接收消息,例如:

java 复制代码
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

@Component
public class RabbitMQListener {
    
    @Autowired
    private RabbitTemplate rabbitTemplate;
    
    @RabbitListener(queues = "myQueue")
    public void handleMessage(Object message) {
        // 处理接收到的消息
        System.out.println("接收到消息: " + message);
    }
}

以上是在 RabbitMQ 中使用 rabbitTemplate 的基本步骤。你可以根据

运行代码,即可发送消息到 RabbitMQ 队列中。

相关推荐
Kiyra12 小时前
WebSocket vs HTTP:为什么 IM 系统选择长连接?
分布式·websocket·网络协议·http·设计模式·系统架构·wpf
程序员阿鹏15 小时前
怎么理解削峰填谷?
java·开发语言·数据结构·spring·zookeeper·rabbitmq·rab
程序员阿鹏17 小时前
分布式事务管理
java·开发语言·分布式
武子康18 小时前
Java-213 RocketMQ(MetaQ)演进与核心架构:NameServer/Broker/Producer/Consumer 工作机制
大数据·分布式·架构·消息队列·系统架构·rocketmq·java-rocketmq
2301_7679026419 小时前
Ceph 分布式存储从入门到实战
分布式·ceph
FinTech老王19 小时前
制造业Oracle迁移替换:集中式vs分布式架构如何选择?
分布式·oracle·架构
风跟我说过她19 小时前
HBase完全分布式部署详细教程(含HA高可用版+普通非HA版)
大数据·数据库·分布式·centos·hbase
十五年专注C++开发20 小时前
Jieba库: 一个中文分词领域的经典库
c++·分布式·自然语言处理·中文分词
Vic1010121 小时前
【无标题】
java·数据库·分布式
武子康21 小时前
Java-216 RocketMQ 4.5.1 在 JDK9+ 从0到1全流程启动踩坑全解:脚本兼容修复(GC 参数/CLASSPATH/ext.dirs)
java·大数据·分布式·消息队列·系统架构·rocketmq·java-rocketmq