首页 > 其他分享 >rabbitMq的简单统计

rabbitMq的简单统计

时间:2023-03-26 22:44:22浏览次数:41  
标签:String 队列 rabbitMq 死信 消息 简单 correlationData public 统计

1.TTL 消息队列的超时时间设置

使用场景介绍---购物付款在指定时间内进行,超过某个时间就会取消(取消后的队列就会加入到死信队列中)

  1. 通过TTL特有的参数进行插入,设置 x-message-ttl 参数给予超时时间

  2. 通过MessagePostProcessor类实现方法进行设置 信息 的超时时间

2.Confirm机制和Retrun机制(监听)

image-20230314223637566

Confirm机制用于生产者与交换机之间,确保两者之间的消息通畅,通过回调数据展现两者的情况。

ACK:当消息被borker签收,会回调此方法

# Confirm 的开启 publisher-confirm-type
# Return  的开启 publisher-returns
# correlated 执行ack的时候还会携带数据(消息的元数据)
# none 为禁用
# simple 不推荐使用
spring:
  rabbitmq:
    port: 5672
    virtual-host: cystest
    username: root
    password: root
    host: 192.168.231.3
    publisher-confirm-type: correlated
    publisher-returns: true

//实现ACK的监听器
@Component
public class MyConfirm implements RabbitTemplate.ConfirmCallback {

    @Autowired
    RabbitTemplate rabbitTemplate;

    // @PostConstruct 服务启动时就会执行该方法,Spring初始化时执行该方法
    @PostConstruct
    public void init(){
        rabbitTemplate.setConfirmCallback(this);
        rabbitTemplate.setReturnsCallback(this);
    }

    @Override
    public void confirm(CorrelationData correlationData, boolean ack, String s) {
        //获取消息的ID
        String id = "";
        if (Objects.nonNull(correlationData)){
            id = correlationData.getId();
        }
        if (ack){
            System.out.println("消息投递成功,id:"+id);
        }else {
            //可以将消息添加到定时任务,等待下次发送
            System.out.println("消息投递失败,原因:"+s);
        }
    }
     //消息没有传递到队列
    @Override
    public void returnedMessage(ReturnedMessage returnedMessage) {
        System.out.println("消息:"+new String(returnedMessage.getMessage().getBody())+",没有成功投递到队列");
    }
}


@Service
public class ProducerServiceImpl {

    @Autowired
    RabbitTemplate rabbitTemplate;

    public String sentMessage(String message){
        CorrelationData correlationData = new CorrelationData();
        correlationData.setId(UUID.randomUUID().toString());
        rabbitTemplate.convertAndSend("cys_confirm_test123","cys",message,correlationData);
        return "success";
    }
}

@RestController
public class ProducerController {
    @Autowired
    ProducerServiceImpl service;

    @GetMapping("/send")
    public String send(String message){
        return service.sentMessage(message);
    }
}

3.死信队列

其实也是普通队列,只是死信队列中存储的消息是未被正常执行的消息;
1.超时未被消费 2.消息数量大于队列限制数量 3.消息未被签收
设置信息队列的参数以此声明死信队列,再用普通队列绑定死信队列,这样不正常的消息就会进入死信队列。

标签:String,队列,rabbitMq,死信,消息,简单,correlationData,public,统计
From: https://www.cnblogs.com/cmdcs/p/17259820.html

相关文章

  • 简单数据结构做题记录
    CF526FPuddingMonsters典题,发现这本质上是一个一维问题,一个区间合法当且仅当\(\max-\min=r-l\),枚举右端点维护左端点的变化量,用两个单调栈维护到\(r\)的最大最......
  • 实验3 简单shell的设计和实现
    Unix实验报告实验:实验3简单shell的设计和实现专业:计算机科学与技术班级:1班姓名:姚怀聿学号:229202022046322022年11月5日......
  • Android简单集成高德地图API
    首先进入高德官网  高德开放平台|高德地图API(amap.com)  注册登录完成之后创建新应用  点击之后呈现如下页面:  Key的名称随便起,主要是提交后会有一个......
  • JS 做一个简单的 Parser
    前言前些天偶然看到以前写的一份代码,注意有一段尘封的代码,被我遗忘了。这段代码是一个简单的解析器,当时是为了解析日志而做的。最初解析日志时,我只是简单的正则加上分割,写......
  • RabbitMQ 04 直连模式-Java操作
    使用Java原生的方式使用RabbitMQ现在已经较少,但这是基础,还是有必要了解的。引入依赖。<dependency><groupId>com.rabbitmq</groupId><artifactId>amqp-clien......
  • RabbitMQ 05 直连模式-Spring Boot操作
    SpringBoot操作SpringBoot集成RabbitMQ是现在主流的操作RabbitMQ的方式。官方文档:https://docs.spring.io/spring-amqp/docs/current/reference/html/引入依赖。<d......
  • AutoResetEvent/ManualResetEvent 的简单理解与运用
    AutoResetEvent和ManualResetEvent只是构造函数包装器它们唯一要做的就是使用EventResetMode.AutoReset或EventResetMode.ManualReset从EventWaitHandle调用构造函数.......
  • C# Autofac简单用法
    十年河东,十年河西,莫欺少年穷学无止境,精益求精新建一个控制台程序,如下 MyAutoFac项目引用NugetautofacV6.5版本新建如下接口:publicinterface动物{void......
  • RabbitMQ快速入门与详解
    一、RabbitMQ简介1.简介 RabbitMQ是一个开源的消息代理(MessageBroker)软件,实现了高级消息队列协议(AMQP),支持多种消息传递模式,例如点对点、订阅/发布等。 RabbitMQ的核......
  • 重置RabbitMQ用户密码
    在/usr/sbin下执行rabbitmqctlset_user_tags用户名用户权限[root@rzksbin]#pwd/usr/sbin[root@rzksbin]#rabbitmqctlset_user_tagsxxxadministratorSet......