spring-rabbitMQ

  • 来源:
  • 更新日期:2018-04-26

摘要:摘要: “消息队列”是在消息的传输过程中保存消息的容器。消息队列管理器在将消息从它的源中继到它的目标时充当中间人。 队列的主要目的是提供路由并保证消息的传递;如果发送消息时接收者不可用,消息队列会保留消息,直到可以成功地传递它。


“消息队列”是在消息的传输过程中保存消息的容器。消息队列管理器在将消息从它的源中继到它的目标时充当中间人。
队列的主要目的是提供路由并保证消息的传递;如果发送消息时接收者不可用,消息队列会保留消息,直到可以成功地传递它。

002UASMrzy7605pjKJv15&690.jpg
队列定义?
队列是一个“先进先出”容器。你放东西的顺序也取东西的顺序。LinkedList有支持队列功能的方法,所以它也能当作队列来使用。
队列(Queue)是只允许在一端进行插入,而在另一端进行删除的运算受限的线性表

优点:解耦 冗余 扩展性 灵活性 & 峰值处理能力 可恢复性 送达保证 排序保证 缓冲 理解数据流 异步通信


消息传递:
为了实现负载均衡,可以
在消费者端通知RabbitMQ,一个消息处理完之后才会接受下一个消息。


RabbitMQ与SpringMVC集成 实现发送消息队列


RabbitMQ是消息代理——一个消息传递的中介。它给您的应用程序中一个共同的平台来发送和接收消息,和一个安全的地方住,
直到收到你的消息。

Broker:简单来说就是消息队列服务器实体。
Exchange:消息交换机,它指定消息按什么规则,路由到哪个队列。
Queue:消息队列载体,每个消息都会被投入到一个或多个队列。
Binding:绑定,它的作用就是把exchange和queue按照路由规则绑定起来。
Routing Key:路由关键字,exchange根据这个关键字进行消息投递。
vhost:虚拟主机,一个broker里可以开设多个vhost,用作不同用户的权限分离。
producer:消息生产者,就是投递消息的程序。
consumer:消息消费者,就是接受消息的程序。
channel:消息通道,在客户端的每个连接里,可建立多个channel,每个channel代表一个会话任务。


消息队列的使用过程大概如下:
(1)客户端连接到消息队列服务器,打开一个channel。
(2)客户端声明一个exchange,并设置相关属性。
(3)客户端声明一个queue,并设置相关属性。
(4)客户端使用routing key,在exchange和queue之间建立好绑定关系。
(5)客户端投递消息到exchange。




工作流程:
当客户端启动时,它创建了匿名的exclusive callback queue.
客户端的RPC请求时将同时设置两个properties: reply_to设置为 callback queue; correlation_id 设置为每个request一个独一无二的值.
请求将被发送到an rpc_queue queue.
RPC端或者说server一直在等待那个queue的请求。当请求到达时,它将通过在reply_to指定的queue回复一个message给client。
client一直等待callback queue的数据。当message到达时,它将检查 correlation_id 的值,如果值和它request发送时的一致那么就将返回响应。

安装 RabbitMq 消息队列:
1, 下载 安装 Erlang 【Erlang运行时环境是一个虚拟机,有点像Java虚拟机,这样代码一经编译,同样可以随处运行。】
运行直接安装,更换安装目录, 配置环境变量 ERLANG_HOME C:Program Files (x86)erl5.9 添加到PATH %ERLANG_HOME%bin;
2, 下载 安装 RabbitMQ
运行直接安装,更换安装目录, 配置环境变量 D:Program FilesRabbitMQ Serverrabbitmq_server-2.8.0
添加到PATH %RABBITMQ_SERVER%sbin;
到 D:Program FilesRabbitMQ Serverrabbitmq_server-2.8.0sbin 运行 rabbitmq-service.bat
运行:
找到sbin/目录,运行程序:
/usr/local/sbin/rabbitmq-server –detached

停止程序:
/usr/local/sbin/rabbitmqctl stop

rabbitmq-plugins.bat list查看已安装的插件列表
rabbitmq-plugins.bat enable rabbitmq_management 命令开启网页版控制台。