Springboot简单整合Rabbit
两个项目。分别是生产者和消费者项目
。首先引入依赖。两边pom都一样
第一次练习,启动生产者后,再启动消费者,一直报找不到 队列的声明。
后排查发现是 需要现在生产者这边浏览器访问一次生产消息的方法,以让交换机和队列在rabbit服务器生成。
因为交换机的生成属于懒加载。不发送消息是不生成交换机的。所以开始直接启动消费者会报错 找不到队列的声明
<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.kf</groupId>
<artifactId>consumer-springboot</artifactId>
<version>0.0.1-SNAPSHOT</version> <parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.0.RELEASE</version>
</parent>
<dependencies> <!-- springboot-web组件 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- 添加springboot对amqp的支持 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
</dependency>
<!--fastjson -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.49</version>
</dependency>
</dependencies>
</project>
生产者这边写入Fanout的配置
package com.kf.conf; import org.springframework.amqp.core.Binding;
import org.springframework.amqp.core.BindingBuilder;
import org.springframework.amqp.core.FanoutExchange;
import org.springframework.amqp.core.Queue;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component; /**
* Fanout配置
* @author kf
*
*/
@Component
public class FanoutConf {
/**
* fanout没有路由键
* 1:定义队列名,交换机名
* 2:注册队列,交换机
* 3:绑定队列和交换机
*/ private String QUEUE_SMS = "QUEUE_SMS"; private String QUEUE_EMAIL = "QUEUE_EMAIL"; private String FANOUTEXCHANGE = "FANOUTEXCHANGE"; //注册短信队列
@Bean
public Queue queueSms(){
return new Queue(QUEUE_SMS);
}
//注册邮件队列
@Bean
public Queue queueEmail(){
return new Queue(QUEUE_EMAIL);
} //注册交换机
@Bean
public FanoutExchange fanoutExchange(){
return new FanoutExchange(FANOUTEXCHANGE);
} //绑定队列和交换机
/**
*
* @param queueSms 此参数用的是上方定义队列的方法名,注册Bean时,默认方法名为该Bean的id
* @param fanoutExchange 此参数用的是上方定义队列的方法名,注册Bean时,默认方法名为该Bean的id
* @return
*/
@Bean
public Binding bindgFanoutExchangeSms(Queue queueSms, FanoutExchange fanoutExchange){
return BindingBuilder.bind(queueSms).to(fanoutExchange);
} @Bean
public Binding bindgFanoutExchangeEmail(Queue queueEmail, FanoutExchange fanoutExchange){
return BindingBuilder.bind(queueEmail).to(fanoutExchange);
} }
创建消息发送的templet:
package com.kf.producer; import org.springframework.amqp.core.AmqpTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component; @Component
public class FanoutProducer { @Autowired
private AmqpTemplate amqpTemplate; public void sendMes(String queueName){
System.out.println("队列名:"+queueName);
String msg = "此处是fanout的消息体";
amqpTemplate.convertAndSend(queueName, msg);
} }
创建controller:
package com.kf.controller; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import com.kf.producer.FanoutProducer; @RestController
public class ProducerController {
@Autowired
private FanoutProducer fanoutProducer; @RequestMapping("/sendFanout")
public String sendFanoutMessage(String queueName){
fanoutProducer.sendMes(queueName);
return "success";
} }
创建启动:
package com.kf; import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication
public class ProducerMainClass {
public static void main(String[] args) {
SpringApplication.run(ProducerMainClass.class, args);
} }
引入rabbit的链接配置
spring:
rabbitmq:
####ip
host: 127.0.0.1
####端口
port: 5672
####用户名
username: guest
####密码
password: guest
### 虚拟主机
virtual-host: /kf
消费者工程:
package com.kf.consumer.sms; import org.springframework.amqp.rabbit.annotation.RabbitHandler;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component; @Component
@RabbitListener(queues = "QUEUE_SMS")
public class SmsConsumer { //监听队列消息注解
@RabbitHandler
public void accept(String msg){
System.out.println("短信消费者接收消息:"+msg); } }
package com.kf.consumer.email; import org.springframework.amqp.rabbit.annotation.RabbitHandler;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;
@Component
@RabbitListener(queues = "QUEUE_EMAIL")
public class EmailConsumer { //监听队列消息注解
@RabbitHandler
public void accept(String msg){
System.out.println("邮件消费者接收到:"+msg); } }
创建启动:
package com.kf; import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication
public class ConsumerMainClass {
public static void main(String[] args) {
SpringApplication.run(ConsumerMainClass.class, args);
} }
创建链接。注意启动端口号:
spring:
rabbitmq:
####ip
host: 127.0.0.1
####端口
port: 5672
####用户名
username: guest
####密码
password: guest
### 虚拟主机
virtual-host: /kf server:
port: 8081
Springboot简单整合Rabbit的更多相关文章
- SpringBoot简单整合redis
Jedis和Lettuce Lettuce 和 Jedis 的定位都是Redis的client,所以他们当然可以直接连接redis server. Jedis在实现上是直接连接的redis serve ...
- Quartz SpringBoot 简单整合一下
一次简单的代码整合记录. 数据库准备 如果是MySQL可能出现一些小问题.比如联合主键长度超限制,已经记录解决办法了. CREATE TABLE QRTZ_JOB_DETAILS ( SCHED_NA ...
- SpringBoot简单整合Gateway网关
引入依赖 <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>s ...
- SpringBoot简单整合分布式任务调度平台(XXL-JOB)
官方文档:https://www.xuxueli.com/xxl-job/#%E3%80%8A%E5%88%86%E5%B8%83%E5%BC%8F%E4%BB%BB%E5%8A%A1%E8%B0%8 ...
- SpringBoot简单整合Actuator监控
pom依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>s ...
- Springboot与MyBatis简单整合
之前搭传统的ssm框架,配置文件很多,看了几天文档才把那些xml的逻辑关系搞得七七八八,搭起来也是很麻烦,那时我完全按网上那个demo的版本要求(jdk和tomcat),所以最后是各种问题没成功跑起来 ...
- 【spring boot】SpringBoot初学(8)– 简单整合redis
前言 到目前为止,把项目中需要用到的:properties读取.数据源配置.整合mybatis/JdbcTemplate.AOP.WebService.redis.filter.interceptor ...
- SpringBoot RabbitMQ 整合使用
 ### 前提 上次写了篇文章,[<SpringBoot ...
- springboot+maven整合spring security
springboot+maven整合spring security已经做了两次了,然而还是不太熟悉,这里针对后台简单记录一下需要做哪些事情,具体的步骤怎么操作网上都有,不再赘述.1.pom.xml中添 ...
随机推荐
- django 配置xadmin
django xadmin本地安装 百度云 下载,激活码:bxhv,下载后不需要解压,直接本地 pip install xxx.zip django 版本需要 1.1.11, 1,添加app INST ...
- [AGC006E] Rotate 3x3 树状数组+贪心
Description XFZ在北京一环内有一套房. XFZ房子的地砖呈网格状分布,是一个3∗N3∗N的网格.XFZ在买下这套房时,每个地砖上有一个数字,位置为(i,j)(i,j)的地砖上的数 ...
- Ionic2的CLI的命令行
http://blog.csdn.net/qq_33315185/article/details/68067747 在我们开发Ionic app的时候 CLI 是一个非常重要的工具.CLI包含了很多开 ...
- 【BZOJ1296】[SCOI2009]粉刷匠 (DP+背包)
[SCOI2009]粉刷匠 题目描述 \(windy\)有 \(N\) 条木板需要被粉刷. 每条木板被分为 \(M\) 个格子. 每个格子要被刷成红色或蓝色. \(windy\)每次粉刷,只能选择一条 ...
- 海思3519A上移植OpenCV3.x
环境安装与准备 下载opencv3.4.1. 或者 下载opencv3.2.0. 进入到opencv所在的目录新建目录build,install 安装cmake: apt-get install cm ...
- ReactNative之坑:停在gradle一直出点
问题: 初次安装好React Native 环境后,运行项目,会停留在下载 gradle 的界面一直出点 原因: 下载gradle一直不成功 解决方案: 可以根据提示的版本信息,手动下载,放在目录中, ...
- jenkins 判断是手动触发还是定时器触发
根据变量BUILD_CAUSE的值可以判断本次触发是手动触发还是定时器触发 手动触发:MANUALTRIGGER 定时器触发:TIMERTRIGGER
- appium+android各配置参数获取'platformName'、'platformVersion'、appActivity、deviceName、webdriver.Remote
图中1的获取--'platformName'.'platformVersion' 点击appium右上角的运行按钮,可通过上面查看platformName 和 platformVersion 平台版本 ...
- .net core webapi 部署到 IIS
主要参考这篇: https://blog.csdn.net/weixin_37645900/article/details/80224100 但是我这边按这篇部署出来的一直没成功. 最后是做了如下的修 ...
- iview tree 之如何获取已勾选的节点
1.记得添加 ref 2.用 this.$refs.tree.getCheckNodes()