SpringBoot-RabbitMQ01-入门介绍-阿里云开发者社区

开发者社区> 游客a74jvhcp7vclg> 正文

SpringBoot-RabbitMQ01-入门介绍

简介: AMQP (Advanced Message Queuing Protocol ,高级消息队列协议)是 个线路层的协议规范,而不是 API 规范(例如 JMS )。由于 AMQP 是一个线路层协议规范,因此它天然就是跨平台的,就像 SMTP HTTP 等协议 样,只要开发者按照规范的格式发送数据,任何平台都可以通过 AMQP进行消息交互。像目前流行的 StormMQ RabbitMQ 等都实现了 AMQP. ———————————————— 版权声明:本文为CSDN博主「波波烤鸭」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://bl
+关注继续查看



 前面给大家介绍过了ActiveMQ,本文开始给大家介绍下另一个消息中间件RabbitMQ。

RabbitMQ安装(Linux环境)

RabbitMQ

AMQP 简介

 AMQP (Advanced Message Queuing Protocol ,高级消息队列协议)是 个线路层的协议规范,而不是 API 规范(例如 JMS )。由于 AMQP 是一个线路层协议规范,因此它天然就是跨平台的,就像 SMTP HTTP 等协议 样,只要开发者按照规范的格式发送数据,任何平台都可以通过 AMQP进行消息交互。像目前流行的 StormMQ RabbitMQ 等都实现了 AMQP.

RabbitMQ简介

 RabbitMQ 一个实现了 AMQP 的开源消息中间件,使用高性能的 Erlang 编写。 RabbitMQ有可靠性、支持多种协议、高可用、支持消息集群以及多语言客户端等特点,在分布式系统中存储转发消息,具有不错的性能表现。

为什么要使用 RabbitMQ?他解决了什么问题?

 现在的市面上有很多MQ可以选择,比如ActiveMQ、ZeroMQ、Appche Qpid,那问题来了为什么要选择RabbitMQ?

   除了Qpid,RabbitMQ是唯一一个实现了AMQP标准的消息服务器;

   可靠性,RabbitMQ的持久化支持,保证了消息的稳定性;

   高并发,RabbitMQ使用了Erlang开发语言,Erlang是为电话交换机开发的语言,天生自带高并发光环,和高可用特性;

   集群部署简单,正是应为Erlang使得RabbitMQ集群部署变的超级简单;

   社区活跃度高,根据网上资料来看,RabbitMQ也是首选;

image.png

image.png

image.png

image.png

image.png

消息队列基础知识。

1 Provider

  消息生产者,就是投递消息的程序。

2 Consumer

  消息消费者,就是接受消息的程序。

3 没有使用消息队列时消息传递方式

image.png

4 使用消息队列后消息传递方式

image.png

5 什么是队列?

  队列就像存放了商品的仓库或者商店,是生产商品的工厂和购买商品的用户之间的中转站

6 队列里存储了什么?

  在 rabbitMQ 中,信息流从你的应用程序出发,来到 Rabbitmq 的队列,所有信息可以只存储在一个队列中。队列可以存储很多信息,因为它基本上是一个无限制的缓冲区,前提是你的机器有足够的存储空间。

7 队列和应用程序的关系?

  多个生产者可以将消息发送到同一个队列中,多个消息者也可以只从同一个队列接收数据。

入门案例

1.创建项目

 创建一个SpringBoot项目,并添加如下依赖:

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-amqp</artifactId>
    </dependency>
</dependencies>

2.配置

 在application.properties中添加RabbitMQ相关的配置

spring.application.name=springcloud-mq
spring.rabbitmq.host=192.168.88.150
spring.rabbitmq.port=5672
spring.rabbitmq.username=dpb
spring.rabbitmq.password=123

# 队列名称
mq.queue.name=hello-queue

3.编写代码

目录结构

image.png

创建消息队列

/**
 * @program: springcloud-rabbitmq-demo
 * @description: 创建消息队列
 * @author: 波波烤鸭
 * @create: 2019-05-21 23:18
 */
@Configuration
public class QueueConfig {
    @Value("${mq.queue.name}")
    private String queueName;

    @Bean
    public Queue createQueue(){
        return new Queue(queueName);
    }
}

创建消费者

/**
 * @program: springcloud-rabbitmq-demo
 * @description: 消费者
 * @author: 波波烤鸭
 * @create: 2019-05-21 23:26
 */
@Component
public class Receiver {

    /**
     * 接收消息的方法,采用消息队列监听机制
     * @param msg
     */
    @RabbitListener(queues = "${mq.queue.name}")
    public void process(String msg){
        System.out.println("recevier:"+msg);
    }
}

创建提供者

/**
 * @program: springcloud-rabbitmq-demo
 * @description: 消息的发送者
 * @author: 波波烤鸭
 * @create: 2019-05-21 23:23
 */
@Component
public class Sender {

    @Autowired
    private AmqpTemplate rabbitAmqpTemplate;

    @Value("${mq.queue.name}")
    private String queueName;

    /**
     * 创建发送消息的方法
     */
    public void send(String msg){
        // 参数: 队列名称 和 消息内容
        rabbitAmqpTemplate.convertAndSend("hello-queue",msg);
    }
}

启动类

@SpringBootApplication
public class SpringcloudRabbitmqDemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringcloudRabbitmqDemoApplication.class, args);
    }

}

单元测试

@RunWith(SpringRunner.class)
@SpringBootTest(classes = SpringcloudRabbitmqDemoApplication.class)
public class SpringcloudRabbitmqDemoApplicationTests {

    @Autowired
    private Sender sender;

    @Test
    public void contextLoads() {
        sender.send("你好啊...");
    }
}

输出结果

image.png


版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
阿里云服务器怎么设置密码?怎么停机?怎么重启服务器?
如果在创建实例时没有设置密码,或者密码丢失,您可以在控制台上重新设置实例的登录密码。本文仅描述如何在 ECS 管理控制台上修改实例登录密码。
10081 0
智能媒体管理产品“文档标准型”使用介绍
智能媒体管理(Intelligent Media Management, IMM) 是阿里云的云服务,它通过 文档标准型 实例提供了 Cloud Native 架构的文档转换/预览功能,本文介绍功能使用、计费相关的配置。
1877 0
介绍一款超实用的演讲必备工具 ZoomIt
本文同步发表于: http://www.cnblogs.com/AloneSword/archive/2010/07/19/1780408.html 最近在整理以前的文件时,发现躺在某个角落的一个超好的实用的小工具——ZoomIt。
732 0
TensorFlow新功能:TensorFlow Probability概率编程工具箱介绍
2018年,tensorflow开发者峰会上,tensorflow管理人员发布了:TensorFlow Probability——一种概率编程工具箱,用于机器学习研究人员和从业人员快速可靠地构建利用最先进硬件的复杂模型。快来学习一下吧~
3345 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,阿里云优惠总结大概有三种登录方式: 登录到ECS云服务器控制台 在ECS云服务器控制台用户可以更改密码、更换系.
13885 0
SQL Server系统表sysobjects介绍与使用
原文:SQL Server系统表sysobjects介绍与使用   关于SQL Server数据库的一切信息都保存在它的系统表格里。我怀疑你是否花过比较多的时间来检查系统表格,因为你总是忙于用户表格。但是,你可能需要偶尔做一点不同寻常的事,例如数据库所有的触发器。
1109 0
SQL2000系统表、存储过程、函数的功能介绍及应用
转自:http://blog.csdn.net/zlp321002/article/details/480925 ----系统表---------------------------------------------------------------------------------------------------- 虽然使用系统存储过程、系统函数与信息架构视图已经可以为我们提供了相当丰富的元数据信息,但是对于某些特殊的元数据信息,我们仍然需要直接对系统表进行查询。
657 0
+关注
游客a74jvhcp7vclg
10余年开发架构经验,同时乐于技术分享!
332
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载