rabbitMq详解

强颜欢笑 提交于 2019-11-28 19:48:05

RabbitMq是基于Amqp(Advanced Message Queuing Protocol,高级消息队列协议)实现的

Amqp协议有以下几个需要了解的概念:

    Virtual Host。一个Virtual Host可对应多个交换机多个队列,意思就是多一层分割,可以将应用通过虚拟主机分开。

    Publisher:消息的提供者,通过交换机根据路由键将消息发送到队列中。

    Exchange:交换器,用来做一层路由的功能,通过路由键的绑定信息,发送消息到相应的队列。(发送的方式也是有很多种,direct(只根据对应的路由键发送给对应的队列。),topic(也是根据路由键发送,但是可以匹配正则表达式,即可以发送给多个经过筛选的队列),fanout(广播模式,将消息发送到所有的对应的队列之下))

    Routing key:路由键,用来绑定交换器和队列,代表着一个路径。

    Bindings: 绑定信息,通过路由键实现

    Message Queue: 队列,最终存储消息的位置。

    Consumer:订阅队列,获取消息,可订阅多个队列。

 回调机制:

    如果消息到达了交换机,可以通过RabbitTemplate.ConfirmCallback的方法,如果消息达到了,就会回调一个true的ACK,如果没到达,返回false的ACK,如果消息到达了交换机

final RabbitTemplate.ConfirmCallback confirmCallback = new RabbitTemplate.ConfirmCallback() {

    @Override
    public void confirm(CorrelationData correlationData, boolean ack, String cause) {
     
    }
};

消息到达了队列,那么则不回调return,如果没到达,那么会return(需设置mandatory=true,否则不会回调,消息会丢失)

final RabbitTemplate.ReturnCallback returnCallback = new RabbitTemplate.ReturnCallback() {
    @Override
    public void returnedMessage(Message message, int replyCode, String replyText, String exchange, String routingKey) {

    }
};
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!