`
liujiekasini0312
  • 浏览: 147583 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Spring Boot中使用RabbitMQ

 
阅读更多

很久没有写Spring Boot的内容了,正好最近在写Spring Cloud Bus的内容,因为内容会有一些相关性,所以先补一篇关于AMQP的整合。

Message Broker与AMQP简介

Message Broker是一种消息验证、传输、路由的架构模式,其设计目标主要应用于下面这些场景:

  • 消息路由到一个或多个目的地
  • 消息转化为其他的表现方式
  • 执行消息的聚集、消息的分解,并将结果发送到他们的目的地,然后重新组合相应返回给消息用户
  • 调用Web服务来检索数据
  • 响应事件或错误
  • 使用发布-订阅模式来提供内容或基于主题的消息路由

AMQP是Advanced Message Queuing Protocol的简称,它是一个面向消息中间件的开放式标准应用层协议。AMQP定义了这些特性:

  • 消息方向
  • 消息队列
  • 消息路由(包括:点到点和发布-订阅模式)
  • 可靠性
  • 安全性

RabbitMQ

本文要介绍的RabbitMQ就是以AMQP协议实现的一种中间件产品,它可以支持多种操作系统,多种编程语言,几乎可以覆盖所有主流的企业级技术平台。

安装

在RabbitMQ官网的下载页面https://www.rabbitmq.com/download.html中,我们可以获取到针对各种不同操作系统的安装包和说明文档。这里,我们将对几个常用的平台一一说明。

下面我们采用的Erlang和RabbitMQ Server版本说明:

  • Erlang/OTP 19.1
  • RabbitMQ Server 3.6.5

Windows安装

  1. 安装Erland,通过官方下载页面http://www.erlang.org/downloads获取exe安装包,直接打开并完成安装。
  2. 安装RabbitMQ,通过官方下载页面https://www.rabbitmq.com/download.html获取exe安装包。
  3. 下载完成后,直接运行安装程序。
  4. RabbitMQ Server安装完成之后,会自动的注册为服务,并以默认配置启动起来。

Mac OS X安装

在Mac OS X中使用brew工具,可以很容易的安装RabbitMQ的服务端,只需要按如下命令操作即可:

  1. brew更新到最新版本,执行:brew update
  2. 安装Erlang,执行:brew install erlang
  3. 安装RabbitMQ Server,执行:brew install rabbitmq

通过上面的命令,RabbitMQ Server的命令会被安装到/usr/local/sbin,并不会自动加到用户的环境变量中去,所以我们需要在.bash_profile.profile文件中增加下面内容:

1
PATH=$PATH:/usr/local/sbin

这样,我们就可以通过rabbitmq-server命令来启动RabbitMQ的服务端了。

Ubuntu安装

在Ubuntu中,我们可以使用APT仓库来进行安装

  1. 安装Erlang,执行:apt-get install erlang
  2. 执行下面的命令,新增APT仓库到/etc/apt/sources.list.d

    1
    2
    echo 'deb http://www.rabbitmq.com/debian/ testing main' |
    sudo tee /etc/apt/sources.list.d/rabbitmq.list
  3. 更新APT仓库的package list,执行sudo apt-get update命令

  4. 安装Rabbit Server,执行sudo apt-get install rabbitmq-server命令

Rabbit管理

我们可以直接通过配置文件的访问进行管理,也可以通过Web的访问进行管理。下面我们将介绍如何通过Web进行管理。

  • 执行rabbitmq-plugins enable rabbitmq_management命令,开启Web管理插件,这样我们就可以通过浏览器来进行管理了。
1
2
3
4
5
6
7
8
9
10
> rabbitmq-plugins enable rabbitmq_management
The following plugins have been enabled:
mochiweb
webmachine
rabbitmq_web_dispatch
amqp_client
rabbitmq_management_agent
rabbitmq_management
Applying plugin configuration to rabbit@PC-201602152056... started 6 plugins.
  • 打开浏览器并访问:http://localhost:15672/,并使用默认用户guest登录,密码也为guest。我们可以看到如下图的管理页面:

从图中,我们可以看到之前章节中提到的一些基本概念,比如:Connections、Channels、Exchanges、Queue等。第一次使用的读者,可以都点开看看都有些什么内容,熟悉一下RabbitMQ Server的服务端。

  • 点击Admin标签,在这里可以进行用户的管理。

Spring Boot整合

下面,我们通过在Spring Boot应用中整合RabbitMQ,并实现一个简单的发送、接收消息的例子来对RabbitMQ有一个直观的感受和理解。

在Spring Boot中整合RabbitMQ是一件非常容易的事,因为之前我们已经介绍过Starter POMs,其中的AMQP模块就可以很好的支持RabbitMQ,下面我们就来详细说说整合过程:

  • 新建一个Spring Boot工程,命名为:“rabbitmq-hello”。
  • pom.xml中引入如下依赖内容,其中spring-boot-starter-amqp用于支持RabbitMQ。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.3.7.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
  • application.properties中配置关于RabbitMQ的连接和用户信息,用户可以回到上面的安装内容,在管理页面中创建用户。
1
2
3
4
5
6
spring.application.name=rabbitmq-hello
spring.rabbitmq.host=localhost
spring.rabbitmq.port=5672
spring.rabbitmq.username=spring
spring.rabbitmq.password=123456
  • 创建消息生产者Sender。通过注入AmqpTemplate接口的实例来实现消息的发送,AmqpTemplate接口定义了一套针对AMQP协议的基础操作。在Spring Boot中会根据配置来注入其具体实现。在该生产者,我们会产生一个字符串,并发送到名为hello的队列中。
1
2
3
4
5
6
7
8
9
10
11
12
13
@Component
public class Sender {
@Autowired
private AmqpTemplate rabbitTemplate;
public void send() {
String context = "hello " + new Date();
System.out.println("Sender : " + context);
this.rabbitTemplate.convertAndSend("hello", context);
}
}
  • 创建消息消费者Receiver。通过@RabbitListener注解定义该类对hello队列的监听,并用@RabbitHandler注解来指定对消息的处理方法。所以,该消费者实现了对hello队列的消费,消费操作为输出消息的字符串内容。
1
2
3
4
5
6
7
8
9
10
@Component
@RabbitListener(queues = "hello")
public class Receiver {
@RabbitHandler
public void process(String hello) {
System.out.println("Receiver : " + hello);
}
}
  • 创建RabbitMQ的配置类RabbitConfig,用来配置队列、交换器、路由等高级信息。这里我们以入门为主,先以最小化的配置来定义,以完成一个基本的生产和消费过程。
1
2
3
4
5
6
7
8
9
@Configuration
public class RabbitConfig {
@Bean
public Queue helloQueue() {
return new Queue("hello");
}
}
  • 创建应用主类:
1
2
3
4
5
6
7
8
@SpringBootApplication
public class HelloApplication {
public static void main(String[] args) {
SpringApplication.run(HelloApplication.class, args);
}
}
  • 创建单元测试类,用来调用消息生产:
1
2
3
4
5
6
7
8
9
10
11
12
13
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = HelloApplication.class)
public class HelloApplicationTests {
@Autowired
private Sender sender;
@Test
public void hello() throws Exception {
sender.send();
}
}

完成程序编写之后,下面开始尝试运行。首先确保RabbitMQ Server已经开始,然后进行下面的操作:

  • 启动应用主类,从控制台中,我们看到如下内容,程序创建了一个访问127.0.0.1:5672springcloud的连接。
1
o.s.a.r.c.CachingConnectionFactory : Created new connection: SimpleConnection@29836d32 [delegate=amqp://springcloud@127.0.0.1:5672/]

同时,我们通过RabbitMQ的控制面板,可以看到Connection和Channels中包含当前连接的条目。

  • 运行单元测试类,我们可以看到控制台中输出下面的内容,消息被发送到了RabbitMQ Server的hello队列中。
1
Sender : hello Sun Sep 25 11:06:11 CST 2016
  • 切换到应用主类的控制台,我们可以看到类似如下输出,消费者对hello队列的监听程序执行了,并输出了接受到的消息信息。
1
Receiver : hello Sun Sep 25 11:06:11 CST 2016

通过上面的示例,我们在Spring Boot应用中引入spring-boot-starter-amqp模块,进行简单配置就完成了对RabbitMQ的消息生产和消费的开发内容。然而在实际应用中,我们还有很多内容没有演示,这里不做更多的讲解,读者可以自行查阅RabbitMQ的官方教程,有更全面的了解。

完整示例:Chapter5-2-1

分享到:
评论

相关推荐

    spring boot中使用rabbitmq

    springboot项目集成rabbitmq的使用案例,可以使用修改项目代码中的application.properties为自己的本地的rabbit的环境的地址运行,项目效果每分钟发送一次数据展示在控制台

    spring boot中使用RabbitMQ routing路由详解

    Spring Boot 中使用 RabbitMQ Routing 路由详解 Spring Boot 框架中,使用 RabbitMQ 实现消息队列是一种非常常见的做法。RabbitMQ 是一个开源的消息队列系统,支持多种语言,包括 Java、Python、Ruby 等。 Spring ...

    Spring Boot 整合 RabbitMQ(在Spring项目中使用RabbitMQ)

    Spring Boot 整合 RabbitMQ(在Spring项目中使用RabbitMQ)

    Spring Boot中使用RabbitMQ的示例代码

    Spring Boot 中使用 RabbitMQ 的示例代码 本篇文章主要介绍了 Spring Boot 中使用 RabbitMQ 的示例代码,通过对 RabbitMQ 的安装、配置和使用进行了详细的讲解,帮助读者快速了解 RabbitMQ 在 Spring Boot 中的应用...

    Spring Boot 集成各种框架 使用案例(spring-boot-rabbitmq、spring-boot-mail)

    Spring Boot 集成各种框架 使用案例(spring-boot-rabbitmq、spring-boot-mail、spring-boot-thymeleaf、spring-boot-shiro)

    基于Spring Boot和RabbitMQ的消息处理系统.zip

    基于Spring Boot和RabbitMQ的消息处理系统 项目简介 本项目是一个基于Spring Boot框架和RabbitMQ消息队列的消息处理系统。它涵盖了消息的生产、消费、路由、交换机配置以及高级特性如发布确认和RPC调用。通过...

    spring-boot集成RabbitMQ

    添加 Spring AMQP 依赖到 `pom.xml` 文件,确保 Spring Boot 可以使用 RabbitMQ 相关功能: ```xml &lt;groupId&gt;org.springframework.boot &lt;artifactId&gt;spring-boot-starter-amqp ``` 3. **创建消息实体** ...

    介绍Spring Cloud Stream与RabbitMQ集成

    介绍Spring Cloud Stream与RabbitMQ集成的代码示例。Spring Cloud Stream是一个建立在Spring Boot和Spring Integration之上的框架,有助于创建事件驱动或消息驱动的微服务。

    Spring Boot集成rabbitMQ实现消息推送源码+项目说明.zip

    Spring Boot集成rabbitMQ实现消息推送,rabbitMQ为异步消息处理提出了一个很好的解决方案,它是一个非常好用的消息中间件。主要解决当生产者大量产生数据时,消费者无法快速消费的问题。这个时候需要一个中间层,...

    Spring boot 示例 官方 Demo

    spring-boot-rabbitmq:spring boot和rabbitmq各种消息应用案例 spring-boot-scheduler:spring boot和定时任务案例 spring-boot-web:web开发综合使用案例 spring-boot-mail:spring boot和邮件服务 spring-boot-...

    spring boot 全面的样例代码

    - chapter5-2-1:[Spring Boot中使用RabbitMQ](http://blog.didispace.com/spring-boot-rabbitmq/) ### 其他功能 - chapter6-1-1:[使用Spring StateMachine框架实现状态机]...

    springboot+rabbitMQ+websocket

    在Spring Boot项目中引入`spring-boot-starter-amqp`依赖,它包含了对RabbitMQ的支持。接着,配置RabbitMQ的相关参数,如主机地址、端口、用户名和密码。在`application.properties`中添加如下配置: ```properties...

    (源码)基于Spring Boot和RabbitMQ的星火操作日志管理系统.zip

    # 基于Spring Boot和RabbitMQ的星火操作日志管理系统 ## 项目简介 本项目是一个基于Spring Boot框架和RabbitMQ消息队列的操作日志管理系统。主要功能包括操作日志的记录、消息队列的管理、身份证号码的验证与分析...

    rabbitmq + spring boot demo 消息确认、持久化、备用交换机、死信交换机等代码

    1. **消息确认**:在RabbitMQ中,消息确认(Message Acknowledgement)是一种确保消息被正确处理的机制。当消费者接收到消息后,它需要发送一个确认信号给RabbitMQ,表明消息已被处理。如果RabbitMQ没有收到确认,它...

    Spring Boot 整合 RabbitMQ 案例.zip

    Spring Boot 整合 RabbitMQ 案例.zipSpring Boot 整合 RabbitMQ 案例.zipSpring Boot 整合 RabbitMQ 案例.zipSpring Boot 整合 RabbitMQ 案例.zipSpring Boot 整合 RabbitMQ 案例.zipSpring Boot 整合 RabbitMQ 案例...

    Spring Boot实战派(源码)

    - Spring Boot支持集成RabbitMQ、Kafka等消息中间件,使用`@RabbitListener`或`@KafkaListener`处理消息。 12. **缓存** - 集成Redis、Hazelcast等缓存系统,使用`@Cacheable`、`@CacheEvict`进行缓存管理。 13....

    Spring Boot Examples

    spring-boot-rabbitmq:spring boot和rabbitmq各种消息应用案例 spring-boot-scheduler:spring boot和定时任务案例 spring-boot-web:web开发综合使用案例 spring-boot-mail:spring boot和邮件服务 spring-...

    springboot结合rabbitmq实现订单超时自动关闭

    本示例将深入探讨如何使用Spring Boot和RabbitMQ来实现这一功能。Spring Boot是Java开发微服务的热门框架,而RabbitMQ则是一个强大的消息队列,常用于处理异步任务和解耦系统组件。 首先,我们需要在Spring Boot...

    SpringCloudStream整合RabbitMq

    要在Spring Boot项目中使用SpringCloudStream和RabbitMQ,首先需要在`pom.xml`文件中添加`spring-cloud-starter-stream-rabbit`依赖。确保版本与Spring Boot版本兼容,例如: ```xml &lt;groupId&gt;org.springframework...

Global site tag (gtag.js) - Google Analytics