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中添 ...
随机推荐
- 全局CSS的配置
/*公共部分开始*/ ::selection{ background-color: #3095fb; color: white; } ::moz-selection{ background-color ...
- jquer 使用原生DOM对象
js中使document.getElementById("ID"); Jquery中可以使用$("#id") 或者$("#id").get( ...
- L2-2 小字辈 (25 分)
本题给定一个庞大家族的家谱,要请你给出最小一辈的名单. 输入格式: 输入在第一行给出家族人口总数 N(不超过 100 000 的正整数) —— 简单起见,我们把家族成员从 1 到 N 编号.随后第二行 ...
- J: Just for fun
J: Just for fun 时间限制: 1 s 内存限制: 128 MB 题目描述 最近carryon在准备考研复习高数,复习到微分学的时候看到一个求曲面某点的切平面的问题 ...
- 【Python】子域名查询脚本
脚本学习,多写写就会啦,来一发个人编写的超级无敌low的子域名查询脚本 #coding:utf-8 import re import requests import urllib import url ...
- Python 3.7版本关于json.dump失效
1.刚才写练习的时候,一直在报错,如图所示 2.度娘之后,才发现是因为我的文件名:json.py 与json.py冲突 所以该一个名字就ok了,如图所示
- [转]矩阵树$Matrix-Tree$定理与行列式
[https://www.cnblogs.com/zj75211/p/8039443.html][矩阵树Matrix-Tree定理与行列式]
- 实验Complex
#include<iostream> #include<cmath> using namespace std; class Complex { public: Complex ...
- (转)nginx日志配置指令详解
这篇文章主要介绍了nginx日志配置指令详解,nginx有一个非常灵活的日志记录模式,每个级别的配置可以有各自独立的访问日志,需要的朋友可以参考下日志对于统计排错来说非常有利的.本文总结了nginx日 ...
- select for update和select for update wait和select for update nowait的区别
CREATE TABLE "TEST6" ( "ID" ), "NAME" ), "AGE" ,), "SEX ...