RabbitMQ是实现了AMQP(advanced message queue protocol)[高级消息队列协议]的开源消息代理软件(亦称面向消息的中间件)。
消息的生产者(发布者),发送消息的程序就是生产者。
消息,由消息头和消息体组成,消息头存放的是路由键(routing-key)还有一些其他的,消息体则是我们自己设置的需要发送的消息了。
交换机,用来接受生产者发送的信息并通过一定规则路由到指定的消息队列(queue)。
绑定,用于消息队列和交换机之间的关联。
消息队列,用来存放生产者发送的消息队列,简单来说就是一个容器,消费者可以从此接受到消息。
消息的消费者,接受消息的即是消费者。
rabbitmq大概结构图如下:
支持 多种消息传递协议 , 消息排队 , 传递确认 , 到队列的灵活路由 , 多种交换类型 ;部署为 集群 以实现高可用性和吞吐量;跨多个可用区域和区域 联合 ;插件众多,方便扩展;跨语言,可以使用任何常用的编程语言进行开发。。。。
上面都是摘抄的官网,太抽象,这里举个例子,rabbitmq可以理解为以前的邮局,以前发送邮件每个人都是直接将信件和收件人地址告诉邮局就行了,不用管具体怎么送到收件人的,可以知道,每个人既可以是发信人,也可以是收件人,同理,一个应用程序也可以既是生产者,也是消费者。我们不可能自己去寄信直接送到对方手里吧,那还用寄信干啥,或许你会觉得现在谁还会寄信,都直接发微信了,同样,我们发微信也不是直接发到对方手机上,也是先发送给微信服务器端那里,然后微信服务端那里再将信息给你想发给的那个用户,中间过程不用我们知道怎么做到的,例子或许不那么恰当,能理解就好了。
没有使用和使用之后的对比图:
安装就不再赘述了,可以百度看下。
添加依赖
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-amqp</artifactId> </dependency> 复制代码
配置rabbitmq
spring: rabbitmq: addresses: 127.0.0.1 port: 5672 username: guest password: guest 复制代码
环境准备
为了下面我们方便测试,首先我这直接就在rabbitmq的ui界面上添加了几个交换机,几个队列,以及绑定规则,直接看图把。
交换机exchange
队列queue
绑定规则
代码
package com.lytw13.demo.controller; import org.springframework.amqp.rabbit.core.RabbitTemplate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController @RequestMapping("user") public class PublicController { @Autowired RabbitTemplate rabbitTemplate; @GetMapping("test1") public String test1() { rabbitTemplate.convertAndSend("demo.fanout","","welcome to regist lytw13'blog!"); return "success"; } @GetMapping("test2") public String test2() { rabbitTemplate.convertAndSend("demo.direct","lytw13","welcome to regist lytw13'blog!"); return "success"; } @GetMapping("test3") public String test3() { rabbitTemplate.convertAndSend("demo.topic","lytw13.hello","welcome to regist lytw13'blog!"); return "success"; } } 复制代码
测试: