zoukankan      html  css  js  c++  java
  • Spring集成rabbitmq

    一.AMQP(Advanced Message Queuing Protocol)

      提供统一消息服务的应用层标准高级消息队列协议,是应用层协议的一个开放标准,是面向消息的中间件设计。基于此协议的客户端与消息中间件可以传递消息,并不受客户端/中间件类型、开发语言等条件的限制。

      RabbitMQ是基于Erlang Virtual Runtime的AMQP的实现。因此可以跨语言的实现消息传递。(TODO:实现javascript与java的消息交互) 

    二.一些概念

      1.AMQP是异步消息协议,关于消息通信的基本方式有两种:

        1)同步方式

        两个通信应用服务器之间必须进行同步,即发送方在发送消息之后需要等待接收方返回对于消息的回馈,之后才能进行下一步。

        2)异步方式

        两个通信应用服务器无需在线等待,发送方发送消息之后可以直接进行下一步操作,但是也因此无法获得发送方反馈。

      tips:RabbitMQ有用到ACK机制,它默认是开启的。当消费者获取Message之后,并正确处理之后会返回给RabbitMQ服务器一个确认消息,服务器收到确认消息会从queue中删掉这个Message。而如果消费者再处理时报错,没有返回确认消息,这个消息会被再次被发送(可能是给自己,也可能是给另外的消费者)。RabbitMQ并没有设置消息处理的超时时间,也就是说消费者可以一直处理下去,当消费者突然中断连接才会判断处理失败。这也带来一个问题,当由程序手动返回acknowledge消息时,如果出现bug没有返回acknowledge则不会再给这个消费者分发消息。

      2.Producer:消息的发送方 

      3.Exchange:交换机,发送方并不会直接将消息发送给消费者,每种Exchange都有自己的路由规则

        1)direct exchange:QueueName会默认作为RoutingKey来使用。Exchange会按照完全匹配的方式,将消息发送到对应的Queue中。

        2)fanout exchange:广播式的exchange,发送方使用fanout Exchange的时候并不需要指定Queue的RoutingKey,消息会发送给所有绑定到fanout Exchange上的队列。

        3)topic exchange:使用方式最自由的exchange,这个exchange可以绑定一个正则表达式。符号“#”会匹配一个或多个词,符号“*”匹配一个词。exchange会对发送方发送的RoutingKey进行正则匹配,消息会发送到所有匹配到的队列中。

      3.Queue:队列,存储消息的结构

      4.RoutingKey:交换机与队列绑定,RoutingKey就是绑定(binding)的逻辑。

  • 相关阅读:
    5000 端口 转发
    程序的运行环境=内存+运行库+系统调用
    日志异步落库
    malloc分配的空间是连续的吗?
    PE/ELF文件里面存的是什么呢?
    [Python]编码声明:是coding:utf-8还是coding=utf-8呢
    基于可执行代码的缓冲区溢出检测模型
    SU Demos-06Selecting Traces
    SU Demos-05Sorting Traces-03susorty
    SU Demos-05Sorting Traces-02Demos
  • 原文地址:https://www.cnblogs.com/zaixiuxing/p/5962185.html
Copyright © 2011-2022 走看看