RabbitMQ的简单使用

    技术2022-07-11  84

    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文件上指定了交换机。

    Processed: 0.019, SQL: 9