036-云E办_Spring集成RabbitMQ-spring AMQP
复习:
send-发送端:
1.通过配置类去配置:Queue队列、TopicExchange交换机、Binding绑定队列和交换机带上路由key【a.*]】
2.发送消息:通过RabbitTemplate模板 .converAndSend转换并发送,(带上交换机和路由key 【a.txt】。从而就会根据交换机和路由k进行匹配,从而找到对应的队列。
recv-接收端:
1.两个注解:
@RabbitListener(queuqes=“队列名字”)用来专门监听队列
@RabbitHandler:监听之后获取消息的处理方法。
一、搭建项目:
为什么使用spring-AMQP
1.基于spring之上,社区活跃
2.对MAQP进行了高度封装
3.极大简化了RabbitMQ的操作
4.易用性、可扩展
1、创建父部项目Project
1.父部环境
2.父部依赖:做依赖管理
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<!--父部依赖,做依赖管理的-->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.7.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.xxxx</groupId>
<artifactId>springamp-demo</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
</project>
2、创建子项目module:send
1.搭建环境:
2.依赖:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.xxxx</groupId>
<artifactId>amqp-send</artifactId>
<version>1.0-SNAPSHOT</version>
<parent>
<groupId>com.xxxx</groupId>
<artifactId>springamp-demo</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</dependency>
</dependencies>
</project>
3. application
创建 resources文件夹
创建application.yml:
spring:
rabbitmq:
host: 192.168.75.100
port: 5672
username: yeb
password: yeb
virtual-host: /yeb
server:
port: 8081
4.send配置类:
package com.xxxx.send.config;
import org.springframework.amqp.core.Binding;
import org.springframework.amqp.core.BindingBuilder;
import org.springframework.amqp.core.Queue;
import org.springframework.amqp.core.TopicExchange;
import org.springframework.boot.autoconfigure.condition.ConditionalOnNotWebApplication;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class RabbitMQConfig {
/**
* 配置类需要哪些东西?
* 1.交换机
* 2.队列
* 3.交换机和队列做绑定
*
*/
/**
* 声明队列
* @return
*/
@Bean
public Queue queue(){
return new Queue("amqp_queue");
}
/**
* 主题模式:工作中主要是用主题模式
* 声明交换机
*
*/
@Bean
public TopicExchange topicExchange(){
return new TopicExchange("amqp_exchange");
}
/**
* 绑定交换机和队列, 主题配置路由:"*.amqp.#"
* 用通配符进行绑定
*
*/
@Bean
public Binding binding(){
return BindingBuilder.bind(queue()).to(topicExchange()).with("*.amqp.#");
}
}
5. send test:
@SpringBootTest
@RunWith(SpringRunner.class)
public class RabbitMQTest {
@Autowired
private RabbitTemplate rabbitTemplate;
@Test
public void testSend(){
String message = "hell0";
System.out.println("发送消息: " + message);
//发送消息:
//(交换机、路由、消息)
//其中配置类路由是:"*.amqp.#" 而 test.amqp是可以找到的。
rabbitTemplate.convertAndSend("amqp_exchange","test.amqp",message);
}
}
3、创建子项目module:revc。同send
- 2.1 和 2.2同创建send基本一模一样
- 2.3:将端口分开:application.yml:server: port 8082
- 没有2.4和2.5的配置类和测试文件
RecvInit
package com.xxxx.send;
import org.springframework.amqp.rabbit.annotation.RabbitHandler;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;
@Component
//监听队列:
@RabbitListener(queues = "amqp_queue")
public class RecvInit {
//监听后获取消息的方法:
@RabbitHandler
public void testRecv(String message){
System.out.println("接收到的消息: " + message);
}
}
二、测试:此demo是简单模式
必须先启动send,进行发送:
然后启动recv,进行监听,接受消息: