spring boot 集成 RabbitMQ

RabbitMQ是一个消息中间件,负责项目间消息的传递。使用消息中间件可以做到项目间解耦和消息的异步处理。支持多语言开发。

RabbitMQ原理:

首先是在RabbitMQ创建所需的exchange中转站和queue队列。创建exchange和queue可以通过服务器代码实现,也可以通过RabbitMQ提供的web管理界面或者http api来操作。

消息生产者服务器将消息发送到指定的exchange中转站,中转站接收到路由指定,将消息放入exchange通过routekey绑定的queue队列,等待消息被消费。

消息消费者服务器连接到RabbitMQ,通过对指定queue队列的监听来获取消息。

同时RabbitMQ做了消息确认和消息持久化的方案来确保消息是否被消费和crash之后的消息的恢复。

RabbitMQ提供了丰富的http api接口供调用来监控RabbitMQ的运行情况。

spring boot集成RabbitMQ使用:


引入jar包
pom.xml中增加

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

配置
在启动类中增加:

@Bean(name = "demoQueue")
public Queue getQueue(){
    return new Queue("queueName");
}
@Bean(name = "demoExchange")
TopicExchange exchange() {
    return new TopicExchange("exchangeName");
}
@Bean
Binding binding(Queue demoQueue, TopicExchange demoExchange) {
    return BindingBuilder.bind(demoQueue).to(demoExchange).with("routingKey");
}

上面这段代码的意思是:创建一个名为queueName的queue和名为exchangeName的exchange,然后通过名为routingKey的路由键将该queue绑定到exchange上。

这一步创建exchange和queue及绑定应该是在消息生成者中。之后才是发送消息。
消息是不会发送到一个不存在的queue上的。


简单的消息发送

@Component
public class MessageSender{
    @Autowired
    private RabbitTemplate rabbitTemplate;
    //发送一个字符串
    public void send(String msg) {
        this.rabbitTemplate.convertAndSend("exchangeName","routingKey", msg);
    }
    //发送一个可序列化对象
    public void send(Job job) {
        this.rabbitTemplate.convertAndSend("exchangeName","routingKey", job);
    }
}

convertAndSend()方法提供了很多重载实现。传递的消息类型是object。
另外如果传递对象的话,该对象必须继承了Serializable接口。同时,消息接收者必须有同样的对象类来接收该消息,而且该对象类所处的包路径必须一致才行。
消息发送可以继承RabbitTemplate.ConfirmCallback接口来实现消息发送确认机制。


接收消息

@Component
@RabbitListener(queues = "queueName")
public class RabbitMqReciever {

    @RabbitHandler
    public void process(String hello) {
        System.out.println("Receiver : " + hello);
    }
    @RabbitHandler
    public void process(Job job) {
        System.out.println("Receiver : " + job);
    }
}

注解@RabbitListener()是指定接收消息的名为queueName的queue
如果有消息就根据消息类型的不同来调用不同的方法。


OVER!

Spring Boot 集成 RabbitMQ 是一种常见的实践,用于在基于 Spring Boot 的应用程序中集成消息队列系统,RabbitMQ 是一个开源的消息中间件,常用于分布式系统的解耦和异步通信。 下面是简单的集成步骤: 1. 添加依赖:首先,你需要在你的 Maven 或 Gradle 项目中添加 RabbitMQ 客户端的依赖。对于 Maven,可以在 `pom.xml` 中添加: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-amqp</artifactId> </dependency> ``` 对于 Gradle,添加到 `build.gradle` 文件的 `dependencies` 节点: ```groovy implementation 'org.springframework.boot:spring-boot-starter-amqp' ``` 2. 配置 RabbitMQ:在 application.properties 或者 application.yml 文件中配置 RabbitMQ 的连接信息,如主机名、端口号、用户名和密码等: ```properties spring.rabbitmq.host=localhost spring.rabbitmq.port=5672 spring.rabbitmq.username=admin spring.rabbitmq.password=password ``` 3. 创建消息生产者:使用 Spring 的 `RabbitTemplate` 类创建发送消息的方法,通常在服务中定义: ```java @Autowired private RabbitTemplate rabbitTemplate; public void sendMessage(String message) { rabbitTemplate.convertAndSend("queue-name", message); } ``` 4. 创建消息消费者:创建监听特定队列的消费者,可以是传统的 Java 接收器,也可以使用注解驱动(@RabbitListener)的方式: ```java @RabbitListener(queues = "queue-name") public void handleMessage(String message) { System.out.println("Received message: " + message); } ``` 5. 启动应用:运行 Spring Boot 应用,Spring Boot 自动会初始化 RabbitMQ 连接并注册你的消费者。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值