两个项目。分别是生产者和消费者项目

。首先引入依赖。两边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的更多相关文章

  1. SpringBoot简单整合redis

    Jedis和Lettuce Lettuce 和 Jedis 的定位都是Redis的client,所以他们当然可以直接连接redis server. Jedis在实现上是直接连接的redis serve ...

  2. Quartz SpringBoot 简单整合一下

    一次简单的代码整合记录. 数据库准备 如果是MySQL可能出现一些小问题.比如联合主键长度超限制,已经记录解决办法了. CREATE TABLE QRTZ_JOB_DETAILS ( SCHED_NA ...

  3. SpringBoot简单整合Gateway网关

    引入依赖 <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>s ...

  4. 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 ...

  5. SpringBoot简单整合Actuator监控

    pom依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>s ...

  6. Springboot与MyBatis简单整合

    之前搭传统的ssm框架,配置文件很多,看了几天文档才把那些xml的逻辑关系搞得七七八八,搭起来也是很麻烦,那时我完全按网上那个demo的版本要求(jdk和tomcat),所以最后是各种问题没成功跑起来 ...

  7. 【spring boot】SpringBoot初学(8)– 简单整合redis

    前言 到目前为止,把项目中需要用到的:properties读取.数据源配置.整合mybatis/JdbcTemplate.AOP.WebService.redis.filter.interceptor ...

  8. SpringBoot RabbitMQ 整合使用

    ![](http://ww2.sinaimg.cn/large/006tNc79ly1g5jjb62t88j30u00gwdi2.jpg) ### 前提 上次写了篇文章,[<SpringBoot ...

  9. springboot+maven整合spring security

    springboot+maven整合spring security已经做了两次了,然而还是不太熟悉,这里针对后台简单记录一下需要做哪些事情,具体的步骤怎么操作网上都有,不再赘述.1.pom.xml中添 ...

随机推荐

  1. TL431的应用

    TL431的应用 对于基准源,大部分人都认识TL431,因为它物美价廉,高精度,满足一般的应用场合,价格低至1毛钱,就算是ST高端品牌的也是几毛钱.这仅仅是其中一点,还有一点是因为它不仅仅可以作为基准 ...

  2. 903. Valid Permutations for DI Sequence

    We are given S, a length n string of characters from the set {'D', 'I'}. (These letters stand for &q ...

  3. “全栈2019”Java第七十一章:外部类访问静态内部类成员详解

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

  4. “全栈2019”Java第四十九章:重载与重写对比详解

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

  5. [Maven实战-许晓斌]-[第二章]-2.5 Eclipse上面安装Maven插件 m2eclipse

    Eclipse上面安装Maven插件 m2eclipse --需要特别指出的是,越来越多的最新的Eclipse版本自带Maven m2e http://m2eclipse.sonatype.org/s ...

  6. 区分Web服务器、HTTP服务器、应用程序服务器

    在学习前端的过程中.进程听到和看到web服务器.HTTP服务器.应用程序服务器,但一直不知道它们有什么区别,迷惑了好久,今天查看的很多博客,终于算是梳理通了,下面我就来总结一下它们的区别,顺别了解一些 ...

  7. 【sql server】"已更新或删除的行值要么不能使该行成为唯一行,要么改变了多个行" 解决方案

    #事故现场: 1.在手动修改某表中数据是,出现如下错误提示:  已更新或删除的行值要么不能使该行成为唯一行,要么改变了多个行 2.表结构及数据: #解决方法: 1.原因分析:提示被删除的行不是唯一行, ...

  8. JAVA static深入了解

    static关键字: 1)static修饰的成员变量和成员方法独立于该类的任何对象.也就是说,它不依赖类特定的实例,被类的所有实例共享:2)只要这个类被加载,Java虚拟机就能根据类名在运行时数据区的 ...

  9. AS添加依赖库提示Manifest merger failed解决办法

    今天在学习<Android权威编程指南>时 在project structure中添加recyclerview时提示错误 按照提示添加tools:replace标签还是报错 然后切换至bu ...

  10. 进阶篇:2.1)DFMA实施障碍和关键

    本章目的:了解DFMA实施障碍与关键. 1.实施的障碍 面向制造和装配的产品开发能够降低产品成本.提高产品质量.缩短产品开发周期,但是,由于传统产品开发思想和各种条件的限制,实施面向制造和装配的产品开 ...