SpringAMQP的官方地址:https://spring.io/projects/spring-amqp
AMQP:Advanced Message Queuing Protocol,用于在应用程序之间传递业务消息的开放标准,该协议与语言和平台无关,更符合微服务中独立性的要求。
SpringAMQP:基于AMQP协议定义的一套API规范,提供了模板来发送和接受消息。包含两部分,spring-amqp基础抽象,spring-rabbit底层的默认实现
利用SpringAMQP实现HelloWorld中的基础消息队列功能
引入AMQP依赖
publisher和consumer服务都需要amqp依赖,把依赖直接放到父工程中
<!--AMQP依赖,包含RabbitMQ--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-amqp</artifactId> </dependency>
编写application.yml
publisher和consumer服务的application都添加mq连接信息
spring: rabbitmq: host: 192.168.223.128 # 主机名 port: 5672 # 端口 virtual-host: / # 虚拟主机 username: guest # 用户名 password: guest # 密码
publisher编写发送消息代码
@RunWith(SpringRunner.class) @SpringBootTest public class SpringAmqpTest { @Autowired private RabbitTemplate rabbitTemplate; @Test public void testSimpleQueue() { String queueName = "simple.queue"; String message = "hello, spring amqp!"; rabbitTemplate.convertAndSend(queueName, message); } }
@RunWith(SpringRunner.class)将测试类添加到Spring容器中,自动注入才能生效
@SpringBootTest注解会自动检索程序的配置文件,检索顺序是从当前包开始,逐级向上查找被@SpringBootApplication或@SpringBootConfiguration注解的类。
consumer编写获取消息代码
在consumer服务中新建一个类,编写消费逻辑
@Component public class SpringRabbitListener { @RabbitListener(queues = "simple.queue") public void listenSimpleQueueMessage(String msg) throws InterruptedException { System.out.println("spring 消费者接收到消息 :【" + msg + "】"); } }
@Component:添加到spring容器中,spring容器中的一个Bean
@RabbitListener:监听队列,监听simple.queue队列