rabbitmq中的推拉模式,事务性消息,消息持久化,消息堆积

按照网上的图文分析:知道rabbitmq中有一些高级的特性,主要就是消费时的消费模式,消息持久化,以及事务性消息这三个高级特性
消息的消费模式分为: 推 拉 这两种模式
推: 就是消息存储在队列时,队列会将消息都推送给消费进行消费 没有多大的时间间隔 现在高版本中的其实就是默认采用推模式的

//如下就是一个推模式
rabbitTemplate.convertAndSend("exchange", "testDirectRouting", "消息序号:" + i);

拉: 就是消费者在进行消息消费时,它会确认消费者是否接受到消息,确认接收到了才会拉取下一条消息

//以下就是默认采用拉模式来进行消息消费的
rabbitTemplate.convertSendAndReceive("exchange", "testDirectRouting", "消息序号:" + i);

相比于队列,交换机的持久是在声明时规定好的,消息持久化也是在message中定义好的

//主要是将消息存储在body中的
Message message = MessageBuilder.withBody("我们发送的消息内容存放在message的body里面".getBytes()).build();
 //将消息的deLiveryMode设置为持久与永久的       
message.getMessageProperties().setDeliveryMode(MessageDeliveryMode.PERSISTENT);
       rabbitTemplate.setChannelTransacted(true);

事务性消息 其实就是在声明RabbitTemplate时只需要将其的设置为true即可

//就是这么简单
rabbitTemplate.setChannelTransacted(true);

注意点:就是guest账号只能使用localhost连接 使用IP地址会报没有权限的错误

消息堆积感觉这很开放,特别是在我们前面了解了rabbitmq中的很多特性以后
其实消息堆积无非就是生产者的生产速度远大于消费者的消费速度,既然我们知道是什么原因导致,我们可以分别从生产者与消费者两个角度来分析问题
生产者:例如采取强制性的确认机制,这样可以减少生产者的生产速度
消费者:采取推模式进行消费,而不是一条一条的进行消费 采取Fanout模式的交换机,利用ttl特性对消息进行时间的设置,使其进入死信队列中去,无需对消息进行确认
对消费者中的属性根据业务进行设置,主要代码如下:这部分代码主要就是在消费端进行设置的

/**
     * 这是设置消息监听类
     * @return
     */
    @Bean
    public SimpleMessageListenerContainer simpleMessageListenerContainer(){
        SimpleMessageListenerContainer container = new SimpleMessageListenerContainer(cachingConnectionFactory);
        container.setConcurrentConsumers(1);    //设置当前消费者数量
        container.setPrefetchCount(6);   //设置每次从队列中拉取消息的数量
        container.setMaxConcurrentConsumers(1);
        container.setAcknowledgeMode(AcknowledgeMode.MANUAL); //设置当前的消费者确认为手动的,rabbit默认的是自动的
        container.setQueueNames("topic.women", "");     //将队列注入到listenerContainer中去
        container.setMessageListener(messageListener);  //将消息监听类注入到容器中去
        return container;
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值