RabbitMQ使用

  1. 安装
    1.1 windows安装,下载Erlang下载RabbitMq,先安装Erlang,再安装RabbitMq但是注意必须没有中文路径。
    1.2linux安装,使用yum首先使用阿里中央库,然后按照顺序先安装erlang,在安装rabbitMq,不知道具体的软件包名,可以使用yum的search命令查看。
    1.3配置,rabbitmq配置文件有两个,一个是环境变量的配置文件 rabbitmq-env.conf,一个是配置信息的配置文件 rabbitmq.config,windows下一般默认路径C:\Users%USERNAME%\AppData\Roaming or similar,linux下一般默认路径/etc/rabbitmq,配置详情参考
  2. 必要插件
    使用./sbin/rabbitmq-plugins enable rabbitmq_management来启动web管理插件,重新启动rabbitmq
  3. java使用mq编码
    在pom中添加amqp-client依赖和spring-rabbit依赖,在配置文件中使用spring.rabbitmq.*配置mq的ip、端口、用户名、密码,Spring的AmqpTemplate和AmqpAdmin被自动配置,要重试操作,可以启用重试AmqpTemplate配置spring.rabbitmq.template.retry.enabled = true,spring.rabbitmq.template.retry.initial-interval 尝试时间间隔,如何创建一个队列,只需要在组件方法上使用注解@RabbitListener,其中的queues填队列名称,这个方法就变成了队列的处理方法
  4. 消息投递大致过程
    1.客户端创建一个Channel连接消息队列服务器。
    2.声明一个Exchange设置相关属性(分三个类型1.Direct根据给定key投递到对应queue,2.Topic根据给定key模糊匹配投递,3.Fanout不需要key广播投递)。
    3.声明一个Queue设置相关属性。
    4.建立Exchange和Queue之间的联系使用路由key
    5.客户端发送消息到Exchange
    6.Exchange收到消息后根据路由key进行消息路由,将消息投递到一个或多个Queue里
  5. 消费者和生产者的区别
    消费者是面对Queue的,而生产者是面对Exchange的。
  6. 如何保证消息传输的可靠性
    消息传输的不可靠主要是生产者生产的消息,消费者没能收到,我们习惯性使用消息持久化,就是把queue中的消息持久化,queue的持久化是通过durable=true来实现的。详情可以看channel.queueDeclare方法声明,同时发送消息的时候我们需要指定BasicProperties为MessageProperties.PERSISTENT_TEXT_PLAIN,当然也可以自己定义BasicProperties设置deliveryMode=2代表持久化。设置Exchange持久化,方便发送方正常发送,设置channel.exchangeDeclare("",“direct”,true);即durable字段设置为true,当然一般情况下我们还会设置一个备份消息队列服务器,保证还没存盘的消息不会丢失,集群的搭建类似于zookeeper,采用的是主从模式,命令如下主服务器 reset,主服务器 join_cluster rabbit@从服务器。
    当然完成上面的只能保证消息服务器的可靠性,生产者发送到服务器出现问题怎么办?我们可以使用应答模式,调用channel.confirmSelect即使用confirm模式,所有在该Channel上面发布的消息都会被指派一个唯一的ID(从1开始),一旦消息被投递到所有匹配的队列之后,RabbitMQ就会发送一个确认(Basic.Ack)给生产者(包含消息的唯一ID),如果RabbitMQ因为自身内部错误导致消息丢失,就会发送一条nack(Basic.Nack)命令,生产者可以在回调方法中处理该nack命令
    但是消息存入队列之后的可靠性又如何保证?还是使用应答模式,消费者在订阅队列时,可以指定autoAck参数,当autoAck等于false时,RabbitMQ会等待消费者显式地回复确认信号后才从内存(或者磁盘)中移去消息,RabbitMQ不会为未确认的消息设置过期时间,它判断此消息是否需要重新投递给消费者的唯一依据是消费该消息的消费者连接是否已经断开,如果消息消费失败,也可以调用Basic.Reject或者Basic.Nack来拒绝当前消息而不是确认这个时候消息也会被删除。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值