`

85. Spring Boot集成RabbitMQ【从零开始学Spring Boot】

阅读更多

 à悟空学院:https://t.cn/Rg3fKJD

学院中有Spring Boot相关的课程!点击「阅读原文」进行查看!

SpringBoot视频:http://t.cn/A6ZagYTi

Spring Cloud视频:http://t.cn/A6ZagxSR

SpringBoot Shiro视频:http://t.cn/A6Zag7IV

SpringBoot交流平台:https://t.cn/R3QDhU0

SpringData和JPA视频:http://t.cn/A6Zad1OH

SpringSecurity5.0视频:http://t.cn/A6ZadMBe

Sharding-JDBC分库分表实战http://t.cn/A6ZarrqS

分布式事务解决方案「手写代码」:http://t.cn/A6ZaBnIr

 

 

       这一节我们介绍下Spring Boot整合RabbitMQ,对于RabbitMQ这里不过多的介绍,大家可以参考网络上的资源进行安装配置,本节重点是告诉大家如何在Spring Boot中使用RabbitMQ,那么本节分如下几个步骤:

(1) 新建Maven Java Project;

(2) pom.xml添加相关依赖;

(3) 编程+测试

(4) 配置信息

       接下来看看每个步骤是怎么操作的。

(1) 新建Maven Java Project;

       新建一个Maven Java Project项目,取名为spring-boot-rabbitmq

(2) pom.xml添加相关依赖;

       这里需要加入基本的依赖以及rabbitmq相关的依赖,具体如下:

       <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.kfit</groupId>

  <artifactId>spring-boot-rabbitmq</artifactId>

  <version>0.0.1-SNAPSHOT</version>

  <packaging>jar</packaging>

 

  <name>spring-boot-rabbitmq</name>

  <url>http://maven.apache.org</url>

 

  <properties>

    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

    <!-- jdk版本号,Angel在这里使用1.8,大家修改为大家本地配置的jdk版本号即可 -->

    <java.version>1.8</java.version>

  </properties>

 

 

    <!--

       spring boot 父节点依赖,

       引入这个之后相关的引入就不需要添加version配置,

       spring boot会自动选择最合适的版本进行添加。

     -->

    <parent>

       <groupId>org.springframework.boot</groupId>

       <artifactId>spring-boot-starter-parent</artifactId>

       <version>1.3.3.RELEASE</version>

    </parent>

 

  <dependencies>

    <dependency>

      <groupId>junit</groupId>

      <artifactId>junit</artifactId>

      <scope>test</scope>

    </dependency>

   

    <!-- spring boot web支持:mvc,aop... -->

    <dependency>

       <groupId>org.springframework.boot</groupId>

       <artifactId>spring-boot-starter-web</artifactId>

    </dependency>

   

    <dependency>

       <groupId>org.springframework.boot</groupId>

       <artifactId>spring-boot-starter-amqp</artifactId>

    </dependency>

   

  </dependencies>

</project>

 

(3) 编程+测试

       在这里我们为了方便直接在启动类App.java进行编码,先提供代码:

package com.kfit;

 

 

import java.util.Date;

 

import org.springframework.amqp.core.Queue;

import org.springframework.amqp.rabbit.annotation.RabbitHandler;

import org.springframework.amqp.rabbit.annotation.RabbitListener;

import org.springframework.amqp.rabbit.core.RabbitTemplate;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.boot.SpringApplication;

import org.springframework.boot.autoconfigure.SpringBootApplication;

import org.springframework.context.annotation.Bean;

import org.springframework.messaging.handler.annotation.Payload;

import org.springframework.scheduling.annotation.EnableScheduling;

import org.springframework.scheduling.annotation.Scheduled;

 

/**

 *

 * @author Angel --守护天使

 * @version v.0.1

 * @date 2016823

 */

@SpringBootApplication

@EnableScheduling//启用任务调度.

@RabbitListener(queues="foo")//启用Rabbit队列监听foo key.

public class App {

   

   

    //rabbit操作类;

    @Autowired

    private RabbitTemplate rabbitTemplate;

      

    @Scheduled(fixedDelay=3000)//3s执行1次此方法;

    public void send(){

       rabbitTemplate.convertAndSend("foo","zhang");

    }

   

    @Bean

    public Queue fooQueue(){

       returnnew  Queue("foo");

    }

       

    //接收到消息处理.

    @RabbitHandler

    public void onMessage(@Payload String foo){

       System.out.println(" >>> "+new Date() + ": " + foo);

    }

   

   

    public static void main(String[] args) {

       SpringApplication.run(App.class, args);

    }

}

       好了,到这里就可以运行测试了,观察控制台的打印信息:

 >>> Tue Aug 23 15:06:54 CST 2016: zhang

 >>> Tue Aug 23 15:06:57 CST 2016: zhang

 >>> Tue Aug 23 15:07:00 CST 2016: zhang

            看到如上信息,恭喜你简单的例子编写成功了。好了,上面的源代码还是有必要进行简单的讲解下。

            首先我们需要清除RabbitMQ的话有这么几个角色,消息生产者或者说消息提供者(sender);其次就是消息队列提供存放消息的对方(queue);消息消费者或者说消息接收者(receiver)。知道这些概念之后在看代码就好理解很多了。

            我们先看消息提供者:send()方法,这里使用Spring 提供的RabbitTemplate 进行操作消息,调用convertAndSend方法将消息发布到对应的消息频道上,这里也就是使用Queue进行存储;然后我们注意到这个方法不是我们人为执行的方法而是采用定时执行的方式进行3s一次进行发布消息,所以你会看到send方法上有一个注解@Scheduled,那么使用该注解的话,相应的类上上面就需要@EnableScheduling启用注解。

       在上面的分析中我们说消息被发布到队列中,所以我们需要创建一个Queue进行存放,这里需要注意Queue的包路径是org.springframework.amqp.core.Queue

这里我们注入了fooQueue 方法指定队列的名称是foo,那么此队列只会处理keyfoo的消息,其它的key不会处理。

       最后就是消息的接收者了:这里我们使用了@RabbitHandler定义了一个消息接收者onMessage,其中这个方法名可以随意取名,再者我们需要启用Rabbit监听,所以需要在类上添加@RabbitListener,这样编写完就能按照我们的想法执行了。那么如果我们编写了两个消息接收者的话,可以正常运行嘛,两个接收者都能接收到消息嘛,答案是肯定的,因为我们以上的编码是发布(Pub)/订阅(Sub)消息模型。

       很有意思的是,这个方法还可以在简化下,将类上的@RabbitListener直接转移到方法上,去掉@RabbitHandler注解,直接为如下:

//接收到消息处理.

    @RabbitListener(queues = "foo")

    public void onMessage(@Payload String foo){

       System.out.println(" >new>> "+new Date() + ": " + foo);

    }

 

视频&交流平台

à SpringBoot网易云课堂视频

http://study.163.com/course/introduction.htm?courseId=1004329008

à Spring Boot交流平台

http://412887952-qq-com.iteye.com/blog/2321532

 

 

 

 

 

(4) 配置信息

       在以上的代码你会发现我们根本没有添加什么配置信息,所以spring boot提供了默认的配置,那么我们应该怎么修改配置呢,只需要在application.properties进行配置即可:

# RABBIT (RabbitProperties) 

spring.rabbitmq.host= # connection host 

spring.rabbitmq.port=# connection port 

spring.rabbitmq.addresses= # connection addresses (e.g. myhost:9999,otherhost:1111) 

spring.rabbitmq.username= # login user 

spring.rabbitmq.password= # login password 

spring.rabbitmq.virtualhost= 

spring.rabbitmq.dynamic= 

 

 

       这里可以配置主机地址,端口号,用户名密码(默认使用guest/guest)。

 

 

 

分享到:
评论
4 楼 林祥纤 2017-07-21  
PanlJlove 写道
org.springframework.amqp.AmqpConnectException: java.net.ConnectException: Connection refused: connect  无法连接



连接问题,检查下AMQP地址,端口等。
3 楼 PanlJlove 2017-07-11  
org.springframework.amqp.AmqpConnectException: java.net.ConnectException: Connection refused: connect  无法连接
2 楼 justimkiss 2017-06-20  
XW65432 写道
请问,spring.rabbitmq.addresses这个配置是存放什么的


RabbitProperties
1 楼 XW65432 2016-12-12  
请问,spring.rabbitmq.addresses这个配置是存放什么的

相关推荐

    从零开始学Spring Boot

    《从零开始学Spring Boot》是一本由林祥纤编著的书籍,旨在帮助初学者系统地学习和掌握Spring Boot框架。Spring Boot是Java开发领域的一款流行框架,它简化了Spring应用的初始设置和配置,使得开发者能够快速构建可...

    spring-boot实战PDF 完整版和随书源码.7z

    3. 零配置:Spring Boot推崇“约定优于配置”的原则,很多配置都有默认值,极大地减少了繁杂的配置工作。 4. Starter POMs:Spring Boot通过一系列的Starter POMs(父POM)来简化Maven配置,每个Starter POM都对应...

    Spring Boot 系列实战合集.zip

    1. 创建第一个 Spring Boot 项目:从零开始创建一个简单的 "Hello, World!" 应用,理解 Maven 或 Gradle 项目的结构。 2. 使用 Spring Boot 的自动配置:探究如何利用自动配置来简化配置文件。 3. 开发 RESTful API...

    Spring Boot 3 + Vue 3前后端分离保姆级学习型新闻项目

    一套基于时下最新 Java 技术栈 Spring Boot 3 + Vue 3 开发的前后端分离学习型新闻项目,配备保姆级项目开发教程手把手教你从零开始开发上线一个生产级别的 Java 系统。由新闻门户系统、作者后台管理系统、平台后台...

    Spring Boot 2精髓带书签pdf打包送张志君视频教程

    在2017年的SpringBoot视频教程中,你可能会学到如何从零开始搭建Spring Boot项目,理解自动配置的工作原理,如何使用Spring Data JPA进行数据库操作,以及如何利用Actuator进行应用监控。同时,他还可能分享了最佳...

    干净可用spring-boot的项目

    这大大节省了开发者从零开始构建新项目的时间,提高了开发效率。 下面我们将深入探讨Spring Boot的核心特性和主要知识点: 1. **起步依赖(Starter Dependencies)**:Spring Boot通过“起步依赖”管理依赖关系,...

    Spring Boot 3 + Vue 3 开发的前后端分离学习型小说项目

    小说项目,配备保姆级教程手把手教你从零开始开发上线一套生产级别的 Java 系统,由小说门户系统、作家后台管理系统、平台后台管理系统等多个子系统构成。包括小说推荐、作品检索、小说排行榜、小说阅读、小说评论...

    spring-boot-udemy

    本教程将深入探讨Spring Boot的核心特性,并逐步引导你从零开始构建一个完整的Spring Boot应用。我们将涵盖以下主要内容: 1. **Spring Boot简介**:首先,我们将了解Spring Boot的基本概念,包括它的设计理念、...

    spring cloud中文文档

    1. 创建微服务应用:从零开始创建一个简单的微服务应用,包括服务注册、服务发现、服务调用等。 2. 配置管理:如何使用Spring Cloud Config进行集中式配置管理。 3. 容错处理:通过Hystrix实现服务容错,防止雪崩...

    SpringCloud 29 道面试题和答案.docx

    Spring Boot的特点是零配置、内嵌式服务器、自动配置等。开发者可以通过`application.properties`或`application.yml`文件覆盖默认属性。例如,要修改Spring MVC视图解析的前缀和后缀,可以在配置文件中设置: ```...

    SpringCould商城项目.docx

    【SpringCloud商城项目】是一个基于SpringCloud框架构建的电子商务系统,旨在实现微服务...网盘链接中的资源将提供详细的步骤指导,帮助你从零开始搭建和运行这个项目,加深对SpringCloud的理解,并提升实际开发能力。

    基于Springboot的秒杀系统(有报告) Javaee项目,springboot项目

    4. **实现过程**:步骤分解,展示如何从零开始构建系统。 5. **性能测试与优化**:通过压力测试分析系统性能,并提出优化方案。 6. **项目总结与展望**:回顾项目经验,指出不足,对未来可能的扩展或改进进行预测...

    spring cloud 入门操作手册(全)

    本手册将通过实例演示上述各组件的使用,引导读者从零开始搭建一个完整的 Spring Cloud 微服务架构,包括服务的注册与发现、API 网关的实现、服务间的调用、容错机制、配置管理、消息总线的运用以及日志追踪等。...

    SpringBoot高仿小米电子商城项目模板.rar

    这个项目模板可以帮助开发者节省大量的时间,让他们能够专注于业务逻辑的实现,而不是从零开始搭建整个系统架构。 一、SpringBoot简介 SpringBoot是Spring框架的扩展,它简化了Spring应用程序的初始设置和配置。...

    spring-boot-seckill-分布式秒杀系统

    本文将深入探讨如何利用SpringBoot技术栈,从零开始构建一个完整的分布式秒杀系统。 一、项目背景与目标 1. 秒杀系统的目标是处理大量用户在同一时间对有限商品的抢购需求,这对系统的性能和并发处理能力提出了极...

    5本架构师必读电子书.rar

    《架构探险:从零开始写分布式服务架构》是一本关于分布式系统架构的书籍,它将带你逐步了解从单体应用演进到分布式架构的过程。书中会讨论分布式服务的挑战,如服务发现、负载均衡、容错机制、数据一致性等,并给出...

    FlyClould微服务实战项目框架基于SpringCloud构建

    通过Spring Cloud,开发者可以轻松地在应用程序中实现这些功能,而无需从零开始编写大量代码。 2. **Eureka服务注册与发现** 在FlyCloud项目中,Eureka作为服务注册中心,用于管理各个微服务实例的注册和发现。每...

    springcloudalibaba.pdf

    Spring Cloud并不是从零开始构建一套新的技术栈,而是将市面上已经成熟的、经过实际验证的服务框架进行整合和封装,使得开发者能够使用Spring Boot风格来快速搭建分布式系统。Spring Cloud极大地简化了分布式系统...

    毕业设计,基于SpringBoot+Vue+Novel+MySql开发的前后端分离的小说项目,内含Java完整源代码,数据库脚本

    novel 是一套基于时下最新 Java 技术栈 Spring Boot 3 + Vue 3 开发的前后端分离学习型小说项目,配备保姆级教程手把手教你从零开始开发上线一套生产级别的 Java 系统,由小说门户系统、作家后台管理系统、平台后台...

    java毕业设计&课设-SpringCloud微服务大型电商架构系统(视频+源码+资料).doc

    - **视频教程**:从零开始讲解 Spring Cloud 各个核心组件的原理与使用方法,结合具体案例进行实操演示。 - **源代码**:提供了完整的项目源码,方便学习者参考和二次开发。 - **资料文档**:包含官方文档、最佳实践...

Global site tag (gtag.js) - Google Analytics