Spring AMQP consists of a handful of modules, each represented by a JAR in the distribution. These modules are: spring-amqp, and spring-rabbit. The spring-amqp module contains the

   org.springframework.amqp.core package.

Within that package, you will find the classes that represent the core AMQP "model".

RabbitMq系统架构,及工作流程

RabbitMq系统分为三个部分,producer, broker和consumer。 producer产生消息,将消息通过网络信道发送给部署在网络上的Amqp服务器broker的Message queue。consumer通过侦听消息队列来获取信息。

Amqp服务器Broker主要由Exchane和Message Queue组成,主要功能是Message的路由和缓存。

Exchange接受producer发送的message并根据不同的算法将Message路由给不同的queue。Message queue会在message不能被正常消费的时候缓存起来,当Consumer和Message Queue建立连接时,Message Queue会将消息传给consumer

Exchange和Message Queue之间通过Binding进行关联,Exchange和多个Queue会形成一张路由表,Exchange根据Routing Key和Exchange Type将Message路由到MessageQueue。

Binding Key由Consumer在Binding Exchange与Message Queue时指定,而Routing Key由Producer发送Message时指定,两者的匹配方式由Exchange Type决定。

Exchange Type分为Direct(单播)、Topic(组播)、Fanout(广播)。当为Direct(单播)时,Routing Key必须与Binding Key相等时才能匹配成功,当为Topic(组播)时,Routing Key与Binding Key符合一种模式关系即算匹配成功,当为Fanout(广播)时,不受限制。默认Exchange Type是Direct(单播)。

Springmq几个重要的类

Message

Spring AMQP定义的Message类是AMQP域模型中代表之一。Message类封装了body(消息BODY)和properties(消息属性),这使得API看起来很简单。 Message由Header和Body组成,Header是由Producer添加的各种属性的集合,包括Message是否被缓存、由哪个Message Queue接受、优先级是多少等。而Body是真正需要传输的APP数据。

public class Message {

private final MessageProperties messageProperties;

private final byte[] body;

public Message(byte[] body, MessageProperties
messageProperties) {
this.body = body;
this.messageProperties = messageProperties;
} public byte[] getBody() {
return this.body;
} public MessageProperties getMessageProperties() {
return this.messageProperties;
}
}

Exchange

Exchange代表一个AMQP交换,一个消息producer会将消息发送给Exchange。 每个Exchange都有一个唯一的名字和其他的属性。

 public interface Exchange {

String getName();

String getExchangeType();

boolean isDurable();

boolean isAutoDelete();

Map<String, Object> getArguments();

}

ExchangeTypes: 基本类型包括 Direct(单播), Topic(组播), Fanout(广播), and Headers。默认为Direct Exchange

Queue

Message Consumer通过监听消息队列来获取数据

public class Queue  {

private final String name;

private volatile boolean durable;

private volatile boolean exclusive;

private volatile boolean autoDelete;

private volatile Map<String, Object> arguments;

/**
* The queue is durable, non-exclusive and non auto-delete.
*
* @param name the name of the queue.
*/
public Queue(String name) {
this(name, true, false, false);
}

Binding

考虑到producer发送消息给Exchange一个consumer通过queue来接受消息,binding的作用是链接queue和exchange。

ConnectionFactory

管理到RabbitMQ broker的连接接口,具体的实现是CachingConnectionFactory类,CachingConnectionFactory为每个channel保持分离的cach。hostname可以通过构造器传入,同时我们需要提供username和pasword。ConnectionFactory可以使用rabbit namespace快速创建。 ConnectionFactory创建的channel 默认cach-size是1,我们可以使用rabbit namespace配置。

AmqpAdmin

需要为AmqpAdmin绑定指定的ConnectionFactory, 当配置了这个参数,本地的配置会在远端server生效。

RabbitTemplate

需要为RabbitTemplate绑定指定的ConnectionFactory,通过AmqpTemplate对象发送和接受消息。

Reference

http://blog.chinaunix.net/uid-22312037-id-3458208.html RabbitMQ源码解析前奏--AMQP协议

http://docs.spring.io/spring-amqp/reference/html/_reference.html#_introduction_3 Spring-amqp Reference

Spring RabbitMq概述的更多相关文章

  1. Spring Cloud 概述

    1. Spring Cloud 引言 首先我们打开spring 的官网:https://spring.io/ 我们会看到这样一张图片 这个图片告诉我们,开发我们的应用程序就像盖楼一样, 首先我们需要搭 ...

  2. Spring Rabbitmq HelloWorld实例

    之前的博客和大家分享了Rabbitmq的基本框架,及其工作原理,网址为 < http://www.cnblogs.com/jun-ma/p/4840869.html >.今天呢,想和大家一 ...

  3. Spring rabbitMq 中 correlationId或CorrelationIdString 消费者获取为null的问题

    问题 在用Spring boot 的 spring-boot-starter-amqp   快速启动 rabbitMq 是遇到了个坑 消费者端获取不到:correlationId或Correlatio ...

  4. Spring Integration概述

    1.   Spring Integration概述 1.1     背景 Spring框架的一个重要主题是控制反转.从广义上来说,Spring处理其上下文中管理的组件的职责.只要组件减轻了职责,它们同 ...

  5. (转)Spring的概述

    http://blog.csdn.net/yerenyuan_pku/article/details/69663685 Spring的概述 什么是Spring 据度娘所载: Spring是一个开源框架 ...

  6. 微服务与Spring Cloud概述

    微服务与Spring Cloud随着互联网的快速发展, 云计算近十年也得到蓬勃发展, 企业的IT环境和IT架构也逐渐在发生变革,从过去的单体应用架构发展为至今广泛流行的微服务架构. 微服务是一种架构风 ...

  7. Spring IOC 概述

    Spring IOC 概述 IOC(Inversion of Control) 控制反转,也叫 DI(D_ependency injection_) 依赖注入.是一种设计思想.不过我并不同意所谓反转的 ...

  8. RabbitMq 概述

    RabbitMQ是实现了高级消息队列协议(Advanced Message Queueing Protocol , AMQP)的开源消息代理软件(亦称面向消息的中间件). 1.AMQP协议 Rocke ...

  9. 1.Spring 框架概述

    目录 Spring 框架概述 1 我们所说的 "Spring "是什么意思 2. Spring和Spring框架的历史 3. 设计理念 4.反馈和贡献 5.开始使用 Spring ...

随机推荐

  1. Linux CPAN Perl 模块安装

    当我们想使用某些Perl模块的时候,很可能会遇到当前系统不存在这个模块的情况,这时我们可以通过使用CPAN来对相应的模块进行获取,下面就介绍一下CPAN的使用方法.首先,我们可以用perl -e 'u ...

  2. Java自定义表单、自定义字段

    最近想实现用户自定义数据库中的字段,我想大部分人第一想到的就是EAV(Entity-Attribute-Value),这种方式对于写一个小的毕业设计应该还可以使用,当然也有很多CMS系统采用这种方式, ...

  3. Spring 容器

    Spring提供了两个核心接口:BeanFactory和ApplicationContext,其中applicationContext是BeanFactory的子接口. 他们都可代表Spring容器, ...

  4. log4j向oracle中插入一条系统当前时间的sql语句

    配置log4j,要向oracle插入一条系统当前时间的sql语句,按网上查找的总是出现各种各样的报错,最后总结出的写法是: ### shezhi### log4j.rootLogger = debug ...

  5. tmpfs介绍

    tmpfs 前几天发现服务器的内存(ram)和swap使用率非常低,于是就想这么多的资源不用岂不浪费了?google了一下,认识了tmpfs,总的来说tmpfs是一种虚拟内存文件系统正如这个定义它最大 ...

  6. mybatis多数据源配置

    项目目录如下: 按照顺序配置吧 首先是配置config jdbc.driver=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://localhost:3306/a ...

  7. Web系统大规模并发——电商秒杀与抢购 【转】

    电商的秒杀和抢购,对我们来说,都不是一个陌生的东西.然而,从技术的角度来说,这对于Web系统是一个巨大的考验.当一个Web系统,在一秒钟内收到数以万计甚至更多请求时,系统的优化和稳定至关重要.这次我们 ...

  8. [转]jQuery实现清空table表格除首行外的所有数据

    1.其实网上有很多版本,试了好几个都不行,最后还是查到了一个非常方便的:不会清除表格第一行表头部分. 其中J_tab_fam是table的id. 1 $("#J_tab_fam  tr:no ...

  9. 近期C#项目中总结

    1. 读写文件操作 using (file = new System.IO.StreamReader(inputfile)) { using (outfile = new System.IO.Stre ...

  10. PureCode--iOS--自定义UITableViewCell(含疑问)

    纯代码编写的简单自定义UITableViewCell: 1.像处理普通视图一样处理Cell: clsTableViewCell.h: #import <UIKit/UIKit.h> @in ...