RabbitMQ使用消费者和生产者模式。
@Component
public class GoodsListener {
@Autowired
private GoodsHtmlService goodsHtmlService;
@RabbitListener(bindings = @QueueBinding(
value = @Queue(value = "leyou.create.web.queue", durable = "true"),
exchange = @Exchange(
value = "leyou.item.exchange",
ignoreDeclarationExceptions = "true",
type = ExchangeTypes.TOPIC),
key = {"item.insert", "item.update"}))
public void listenCreate(Long id) throws Exception {
if (id == null) {
return;
}
// 创建页面
goodsHtmlService.createHtml(id);
}
@RabbitListener(bindings = @QueueBinding(
value = @Queue(value = "leyou.delete.web.queue", durable = "true"),
exchange = @Exchange(
value = "leyou.item.exchange",
ignoreDeclarationExceptions = "true",
type = ExchangeTypes.TOPIC),
key = "item.delete"))
public void listenDelete(Long id) {
if (id == null) {
return;
}
// 删除页面
goodsHtmlService.deleteHtml(id);
}
}
以上是一个实例,接下来具体说一下,什么是什么
@RabbitListener(bindings = @QueueBinding(
value = @Queue(value = "leyou.create.web.queue", durable = "true"),
exchange = @Exchange(
value = "leyou.item.exchange",
ignoreDeclarationExceptions = "true",
type = ExchangeTypes.TOPIC),
key = {"item.insert", "item.update"}))
public void listenCreate(Long id) throws Exception {
if (id == null) {
return;
}
// 创建页面
goodsHtmlService.createHtml(id);
}
value是一个监听的队列,exchange是被绑定的一个交换机,key是一个routing key,下面的listenCreate方法负责业务处理.
RabbitMQ是基于AMQP协议的,它的核心概念有:
server:又称broker,接受客户端连接,实现AMQP实体服务。
connection:连接和具体broker网络连接。
channel:网络信道,几乎所有操作都在channel中进行,channel是消息读写的通道。客户端可以建立多个channel,每个channel表示一个会话任务。
message:消息,服务器和应用程序之间传递的数据,由properties和body组成。properties可以对消息进行修饰,比如消息的优先级,延迟等高级特性;body是消息实体内容。
*Virtual host:*虚拟主机,用于逻辑隔离,最上层消息的路由。可以在RabbitMQ浏览器管理页面手动操作新建用户(默认是guest),同时也可以给它分配一个虚拟主机的操作权限,如果选择自己的用户,记得在application.yml中设置一个对应的Virtual host,一个Virtual host可以有若干个Exchange和Queue,同一个Virtual host不能有同名的Exchange或Queue。
Exchange:交换机,接受消息,根据路由键转发消息到绑定的队列上。
banding:Exchange和Queue之间的虚拟连接,binding中可以包括routing key.
routing key:一个路由规则,虚拟机根据他来确定如何路由 一条消息。
Queue:消息队列,用来存放消息的队列。
一般情况下,我们接触后三个基本就足够了.
this.amqpTemplate.convertAndSend("item." + type, id);
这是发送消息的方法,item.update,item.delete等等,这是routing key,这里的amqpTemplate已经事先在applica.yml文件上指定了交换机。
3558

被折叠的 条评论
为什么被折叠?



