rabbitMq详解

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) {

    }
};

应用场景:

    解耦合:应用与应用间解耦合,我们可以将数据放在MQ上,供其他应用处理

    异步:消息放入队列,服务(或者系统)之间异步处理。这边的异步指的是进程的异步,不是线程了。

    削峰:当队列使用,减轻数据库压力,将请求放在队列上,慢慢的处理,比如如果一时间有1W个请求过来,我们可以一次处理2000个,然后慢慢处理完。

 

 

转载于:https://my.oschina.net/u/4189935/blog/3098797

你可能感兴趣的:(大数据,数据库)