【rabbitMq 三】springboot整合rabbitmq(以topic为例)

本文通过一个实例展示了如何在SpringBoot项目中集成RabbitMQ进行消息传递。从启动类到配置文件,再到生产者与消费者的具体实现,详细解析了Spring-amqp与spring-rabbit在实际应用中的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言:

之前介绍了rabbitMq是用来干什么的,以及存在的意义是什么,现在与springBoot集成,用一个例子来体会一下。
Spring-amqp是对AMQP协议的抽象实现,而spring-rabbit 是对协议的具体实现,也是目前的唯一实现。底层使用的就是RabbitMQ。

1、启动类:

@SpringBootApplication
public class RabbitmqDemoApplication {

	public static void main(String[] args) {
		SpringApplication.run(RabbitmqDemoApplication.class, args);
	}
}

2、添加AMQP启动器

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

3、yml配置文件中添加RabbitMQ地址

spring:
  rabbitmq:
    host: 自己的服务器地址
    username: leyou
    password: 1234
    virtual-host: /v_leyou

4、生产者

@RunWith(SpringRunner.class)
@SpringBootTest(classes = RabbitmqDemoApplication.class)
public class SendMsg {
    @Autowired
    private AmqpTemplate amqpTemplate;

    @Test
    public void testSend() throws InterruptedException {
        String msg = "hello, rabbitMq";
        this.amqpTemplate.convertAndSend("SPRING.TEST.EXCHANGE","a.b", msg);
        // 等待10秒后再结束
        Thread.sleep(10000);
    }
}

5、消费者(监听)

@Component
public class Listener {
    @RabbitListener(bindings = @QueueBinding(
            value = @Queue(value = "SPRING.TEST.QUEUE",durable="true"),
            exchange = @Exchange(
                    value = "SPRING.TEST.EXCHANGE",
                    ignoreDeclarationExceptions = "true",
                    type = ExchangeTypes.TOPIC
            ),
            key = {"#.#"}))
    public void listen(String msg){
        System.out.println("接收到消息:" + msg);
    }
}
  • @RabbitListener:方法上的注解,声明这个方法是一个消费者方法,需要指定下面的属性:
    • bindings:指定绑定关系,可以有多个。值是@QueueBinding的数组。@QueueBinding包含下面属性:
      • value:这个消费者关联的队列。值是@Queue,代表一个队列 durable = "true"持久化
      • exchange:队列所绑定的交换机,值是@Exchange类型
      • key:队列和交换机绑定的RoutingKey,#.#表示这个路由规则

ignoreDeclarationExceptions = “true” 解决的是下游问题,例如:由于没有声明另一个队列(在错误队列之后定义的),侦听器容器无法初始化。此时将值设置为true,解决了问题

类似listen这样的方法在一个类中可以写多个,就代表多个消费者。
此时我们启动这个服务,看下我们的rabbitMq
在这里插入图片描述

控制台:
在这里插入图片描述

### Java Spring Boot 整合 RabbitMQ教程 #### 配置依赖项 为了使Spring Boot应用程序能够与RabbitMQ交互,需在`pom.xml`文件中加入必要的依赖。这通常涉及引入Spring AMQP以及RabbitMQ的starter包。 ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-amqp</artifactId> </dependency> ``` 此操作确保了应用具备处理AMQP协议的能力,从而可以顺利地同作为AMQP服务器端实现之一的RabbitMQ通信[^1]。 #### 设置属性配置 接着,在`application.properties`或`application.yml`内定义连接至RabbitMQ所需的参数。如: ```properties server.port=8081 spring.application.name=consumer spring.rabbitmq.addresses=127.0.0.1:5672 spring.rabbitmq.username=test spring.rabbitmq.password=123456 spring.rabbitmq.virtual-host=/ spring.rabbitmq.connection-timeout=15000 ``` 上述设置指定了服务监听端口、应用程序名称、目标RabbitMQ的位置及其认证信息等细节[^3]。 #### 启用管理插件(可选) 如果希望监控和管理RabbitMQ,则可以在其安装路径下的`sbin`目录执行如下命令来激活相应的Web界面支持功能: ```bash rabbitmq-plugins enable rabbitmq_management ``` 完成之后可通过浏览器访问默认地址http://localhost:15672来进行图形化管理和查看状态[^4]。 #### 编写业务逻辑代码 最后一步是在项目里编写具体的发送者(Sender)和服务消费者(Consumer),这里给出一个基于Topic交换机模式的子片段[^2]: ```java @SpringBootTest public class RabbitMqExample { @Autowired private AmqpTemplate amqpTemplate; public void sendMessage(String routingKey, String message){ this.amqpTemplate.convertAndSend("exchangeName",routingKey,message); } } ``` 这段代码展示了如何利用@Autowired注入AmqpTemplate对象并调用convertAndSend方法向指定的主题(exchange)发布消息;其中第一个参数代表要使用的Exchange名字,第二个则是路由键(Routing Key),最后一个是要传递的数据内容。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值