rabbitMq-Spring AMQP
程序员文章站
2022-07-15 08:09:11
...
rabbitMq-Spring AMQP
Spring-amqp是对AMQP协议的抽象实现,而spring-rabbit 是对协议的具体实现,也是目前的唯一实现。底层使用的就是RabbitMQ。
1. 依赖配置
如果按我之前的创建项目方式的话,idea是自动配置了,不需要手动添加,如果需要手动配置的话,需要添加一下依赖。
添加AMQP的启动器:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
在application.yml
中添加RabbitMQ地址:
spring:
rabbitmq:
host: 192.168.33.128
username: guest
password: guest
virtual-host: /
2. 监听者
在SpringAmqp中,对消息的消费者进行了封装和抽象,一个普通的JavaBean中的普通方法,只要通过简单的注解,就可以成为一个消费者。
package com.example.rabbitmq_demo.rabbitmq.spring;
import org.springframework.amqp.core.ExchangeTypes;
import org.springframework.amqp.rabbit.annotation.Exchange;
import org.springframework.amqp.rabbit.annotation.Queue;
import org.springframework.amqp.rabbit.annotation.QueueBinding;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;
@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
,代表一个队列 -
exchange
:队列所绑定的交换机,值是@Exchange
类型 -
key
:队列和交换机绑定的RoutingKey
-
-
类似listen这样的方法在一个类中可以写多个,就代表多个消费者。
3. 发送者 AmqpTemplate
Spring最擅长的事情就是封装,把他人的框架进行封装和整合。
Spring为AMQP提供了统一的消息处理模板:AmqpTemplate,非常方便的发送消息,其发送方法:
@RunWith(SpringRunner.class)
@SpringBootTest(classes = RabbitmqDemoApplication.class)
public class MqDemo {
@Autowired
private AmqpTemplate amqpTemplate;
@Test
public void testSend() throws InterruptedException {
String msg = "hello, Spring boot amqp -hi 海神号!";
// 参数: 交换机、routingkey、 消息体
this.amqpTemplate.convertAndSend("spring.test.exchange","a.b", msg);
// 等待10秒后再结束
Thread.sleep(10000);
}
}
测试:
运行发送者代码后,监听者收到消息:
方式就是这样,详细使用还是那几种消息模型,其他设置也是对rabbitmq的api的封装,参看spring代码不难理解。
推荐阅读
-
深入剖析 RabbitMQ —— Spring 框架下实现 AMQP 高级消息队列协议
-
使用Python的Zato发送AMQP消息的教程
-
Spring消息之AMQP.
-
Caused by: org.springframework.amqp.AmqpException: No method found for class [B
-
解决org.springframework.amqp.AmqpException: No method found for class [B 问题
-
org.springframework.amqp.AmqpException: No method found for class [B
-
解决rabbitmq无限循环异常问题亲测 Caused by: org.springframework.amqp.AmqpException: No method found for class [B
-
Spring AMQP
-
Spring AMQP(集成了Rabbitmq)---代码版
-
Spring AMQP