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中添 ...
随机推荐
- 微信小程序遇到的问题与解决
1.微信开发工具报错 400 (Bad Request) 解决方法: 注:因为开发工具升级 content-type的写法变了 如下代码: header:{ "Content-Typ ...
- 一个简单的HTML病毒分析
一直就想写这篇东西了,仅仅是上班时说要上班,不写.回家后又忙着玩游戏,丢一边去了.如今仅仅好不务正业的开写了.希望头儿不会知道我的blog.哈哈 在非常久之前就对HTML的病毒非常感兴趣了,非常好奇怎 ...
- php中数组模拟队列、栈的函数以及数组指针操作
1,数组指针,current表示当前指针,输出其指向的元素:next表示指针移动到下一个元素:prev指针移动到上一个元素:end表示指针移动到最后一个元素:reset表示指针移动到第一个元素: &l ...
- ListView ,GridView 通用适配器
前言 接近半年的时间没有写博客了,今年公司的项目有点多,比较忙,没时间写,这是其一.其次是,这半年来,有时间的时候,我都会看看自己以前写的博客,也许是以前刚刚写博客,经验不足,感觉写出来的博客质量很不 ...
- 谷歌支付服务端详细讲解(PHP)
前不久公司拓展海外市场,要接入google支付.刚开始一头雾水,相关的文档实在太少.而且很多东西都需要FQ,不过好在摸索几天后,总算调试通了. 前提:FQ 1.注册账号google账号 https:/ ...
- 【医学影像】《Dermatologist-level classification of skin cancer with deep neural networks》论文笔记
这是一篇关于皮肤癌分类的文章,核心就是分类器,由斯坦福大学团队发表,居然发到了nature上,让我惊讶又佩服,虽然在方法上没什么大的创新,但是论文本身的工作却意义重大,并且这篇17年见刊的文章,引用量 ...
- 基础篇:1)时代的发展与结构设计--3d与2d设计的变迁
本章目的:机械设计需要追寻时代的脚步. 1.机械作图时代的划分 这张图是作者个人对机械作图发展的简单划分,并非哪个网站的数据.所以粗糙或错误请海涵. 2.2d作图时代 纯2d时代中,工程师开只绘制二维 ...
- 标准结构篇:2)O型橡胶密封圈
本章目的:设计出符合行业要求的O型橡胶密封圈,不必再为一而再,再而三的测试漏水而烦恼. 1.前言 O型橡胶密封圈,简称O型圈,是密封圈的一种,也是最有代表性的标准结构件.顾名思义,它的目的在于密封.密 ...
- Sum(欧拉降幂+快速幂)
Input 2 Output 2 Hint 1. For N = 2, S(1) = S(2) = 1. 2. The input file consists of multiple test cas ...
- Keras中间层输出的两种方式,即特征图可视化
训练好的模型,想要输入中间层的特征图,有两种方式: 1. 通过model.get_layer的方式.创建新的模型,输出为你要的层的名字. 创建模型,debug状态可以看到模型中,base_model/ ...