1. JMS和AMQP

  • JMS(Java Message Service):

    • ActiveMQ是JMS实现;
  • AMQP(Advanced Message Queuing Protocol)
    • 兼容JMS
    • RabbitMQ是AMQP的实现

2. RabbitMQ 简介

  • Message:由消息头和消息体组成,消息体是不透明的,而消息头则由一系列的可选属性组成;
  • Publisher:一个向交换器发布消息的客户端应用程序;
  • Exchange:用来接收生产者发送的消息并将这些消息路由给服务器中的队列;
    • 有四种类型:direct(默认),fanout,topic和headers;
  • Queue:用来保存消息直到发送给消费者,是消息的容器;
  • Binding:用于消息队列和交换器之间的关联;
  • Connection:网络连接,比如一个TCP连接;
  • Channel:多路复用连接中的一条独立的双向数据流通道;
  • Consumer:消息的消费者,表示一个从消息队列中取得消息的客户端应用程序;
  • Virtual Host:虚拟主机,表示一批交换器,消息队列和相关对象;每个vhost本质上就是一个mini版的RabbitMQ服务器;
  • Broker:表示消息队列服务器实体;

3. RabbitMQ 整合(SpringBoot)

  • 自动配置:

    • RabbitAutoConfiguration
    • 自动配置了连接工厂ConnectionFactory;
    • RabbitProperties封装了RabbitMQ的配置;
    • RabbitTemplate:给RabbitMQ发送和接收消息;
    • AmpqAdmin:RabbitMQ系统管理功能组件;
    • @EnableRabbit:开启基于注解的RabbitMQ模式;
    • @EnableRabbit@RabbitListener用于监听消息队列的内容;
// application.properties 配置文件
spring.rabbitmq.host=localhost
spring.rabbitmq.username=guest
spring.rabbitmq.password=guest // 测试类
@RunWith(SpringRunner.class)
@SpringBootTest
public class ApplicationTests{ @Autowired
RabbitTemplate rabbitTemplate; @Test
public void contextLoads(){
// 点对点消息
// Message 需要自己构造一个,定义消息体内容和消息头
// rabbitTemplate.send(exchange, routeKey, message); // rabbitTemplate.convertAndSend(exchange, routeKey, object)
// 只需要传入要发送的对象, 会自动序列化发送给rabbitmq, object 默认当成消息体 Map<String, Object> map = new HashMap<>();
map.put("msg","匆匆的我来了...");
map.put("data",Arrays.asList("777477",232,true)); rabbitTemplate.convertAndSend("exchange.direct", "atnoodles.news",map);
} // 接收消息
@Test
public void receive(){
Object o = rabbitTemplate.receiveAndConvert("atnoodles.news");
System.out.println(o.getClass()); // Class java.util.HashMap
System.our.println(o);
}
} // 如果需要将发送的数据自动转换为JSON,发送出去
// com.noodles.springboot.rabbitmq.config.MyAMQPConfig.java import org.springframework.amqp.support.converter.Jackson2JsonMessageConverter;
import org.springframework.amqp.support.converter.MessageConverter;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; @Configuration
public class MyAMQPConfig{
@Bean
public MessageConverter messageConverter(){
return new Jackson2JsonMessageConverter();
}
}

4. AmpqAdmin

  • 创建和删除 Queue, Exchange, Binding
// 测试类
@RunWith(SpringRunner.class)
@SpringBootTest
public class ApplicationTests{ @Autowired
AmqpAdmin amqpAdmin; @Test
public void createExchange(){
// 创建 Exchange
amqpAdmin.declareExchange(new DirectExchange("amqpAdmin.exchange"));
System.out.println("创建完成..."); // 创建 Queue
amqpAdmin.declareQueue(new Queue("amqpAdmin.queue", true));
}
}

参考资料:

SpringBoot与消息(RabbitMQ)的更多相关文章

  1. SpringBoot系列八:SpringBoot整合消息服务(SpringBoot 整合 ActiveMQ、SpringBoot 整合 RabbitMQ、SpringBoot 整合 Kafka)

    声明:本文来源于MLDN培训视频的课堂笔记,写在这里只是为了方便查阅. 1.概念:SpringBoot 整合消息服务 2.具体内容 对于异步消息组件在实际的应用之中会有两类: · JMS:代表作就是 ...

  2. SpringBoot系列之RabbitMQ使用实用教程

    SpringBoot系列之RabbitMQ使用实用教程 @ 目录 1. 消息队列概述 1.1 MQ的概述 1.2 MQ目的地形式 2. 消息队列实现方式 2.1 常见MQ框架 2.2 MQ实现方式 3 ...

  3. SpringBoot应用操作Rabbitmq(fanout广播高级操作)

    一.广播模式fanout.不需要指定路由key. 注:与topic和direct区别是:fanout广播模式会两个队列同时发送相同的消息,并非由交换器转发到某一个队列 二.实战(广播模式) 1.引入m ...

  4. SpringBoot应用操作Rabbitmq(topic交换器高级操作)

    一.topic交换器为主题交换器,可以根据路由key模糊匹配 实现模型图 二.实战 1.引入maven <dependency> <groupId>org.springfram ...

  5. SpringBoot应用操作Rabbitmq(direct高级操作)

    一.首先声明完成任务架构,通过direct订阅/发布的模式进行生产消费. a.消息生产指定交换器和路由key b.消费者绑定交换器,路由key和队列的关系(集群监控收到的消息不重复) 二.实战演练 1 ...

  6. SpringBoot应用操作Rabbitmq

    记录RabbitMQ的简单应用 1.springboot项目中引入maven包,也是springboot官方的插件 <dependency> <groupId>org.spri ...

  7. springboot入门系列(五):SpringBoot连接多RabbitMQ源

    SpringBoot连接多RabbitMQ源 在实际开发中,很多场景需要异步处理,这时就需要用到RabbitMQ,而且随着场景的增多程序可能需要连接多个RabbitMQ.SpringBoot本身提供了 ...

  8. 新鲜出炉,这是全网讲的最详细的springboot整合消息服务了吧,建议收藏!

    springboot整合activeMq ActiveMq是Apache提供的开源消息系统采用java实现, 很好地支持JMS(Java Message Service,即Java消息服务) 规范 A ...

  9. springboot入门系列(三):SpringBoot教程之RabbitMQ示例

    SpringBoot教程之RabbitMQ示例 SpringBoot框架已经提供了RabbitMQ的使用jar包,开发人员在使用RabbitMQ的时候只需要引用jar包简单的配置一下就可以使用Rabb ...

随机推荐

  1. spring cloud outh2

    使用Spring Cloud Security OAuth2搭建授权服务http://www.blogjava.net/paulwong/archive/2016/09/16/431797.html? ...

  2. Hadoop默认端口表及用途

      端口 用途 9000 fs.defaultFS,如:hdfs://172.25.40.171:9000 9001 dfs.namenode.rpc-address,DataNode会连接这个端口 ...

  3. python学习笔记(9)--Python UnicodeEncodeError: 'gbk' codec can't encode character 解决方法

    Python UnicodeEncodeError: 'gbk' codec can't encode character 解决方法 这篇文章主要介绍了Python UnicodeEncodeErro ...

  4. 动易cms .net版本后台拿shell

    PS:前提是要有IIS6.0的析漏洞 网上我找了好一会儿没有找到.直奔主题.至于怎么弄到密码,全靠坑蒙拐骗. 系统设置=>模板标签管理=>模板管理 然后选则上传模板(如果新建的话会被限制掉 ...

  5. linux - camera capture

    //cut a picture#include <stdio.h>#include <stdlib.h>#include <string.h>#include &l ...

  6. 如何解决PHP里大量数据循环时内存耗尽的问题

    最近在开发一个PHP程序时遇到了下面的错误: PHP Fatal error: Allowed memory size of 268 435 456 bytes exhausted 错误信息显示允许的 ...

  7. UEditor API 文档

    来源:http://www.e4dai.com/ueditor-api/#ue.editor http://www.e4dai.com/ueditor-api/ UE.Editor 依赖 editor ...

  8. 编程之美 set 18 拈两堆石子游戏(3)

    题目 假设有两堆石头, 有两个玩家按照如下规则轮流取石头 每个人每次可以从两堆石头中取出数量相等的石头, 或者仅从一堆石头中取出任意数量的石头 最后把剩下的石头依次拿光的人取胜 首先取石头的人能否赢得 ...

  9. shell脚本学习总结05--变量与环境变量

    bash中一切变量都是以字符串的形式存储,env命令可以查看与此终端进程相关的环境变量. man bash 查看一个进程的环境变量 1.获得程序的PID,例如Java# pgrep java23492 ...

  10. 自定义View中的Path

    我们用Path可以画返回图标,可以画搜索图标,也可以画一个圆,DIDI