springboot2.0使用rabbit,消费端报错?

@RabbitHandler
    public void  receiverMsg(@Payload String msg,
                             @Headers Map<String,Object> headers,
                             Channel channel) throws Exception{
        // 消费者消费消息
        System.out.println("==========获取消息,开始消费============");
       
        Long deliveryTag = (Long) headers.get(AmqpHeaders.DELIVERY_TAG);// 获取消息序号

        System.out.println("=======消息成功消费,手动触发ack===============");
      
        boolean multiple = false;

        channel.basicAck(deliveryTag,multiple);
    }
Long deliveryTag = (Long) headers.get(AmqpHeaders.DELIVERY_TAG);// 这里提示报错
Caused by: java.lang.ClassCastException: class java.lang.String cannot be cast to class java.lang.Long (java.lang.String and java.lang.Long are in module java.base of loader 'bootstrap')
    at com.gulang.core.rabbitmq.ComsumerMsg.receiverMsg(ComsumerMsg.java:33) ~[classes/:na]
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:na]
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
    at java.base/java.lang.reflect.Method.invoke(Method.java:566) ~[na:na]
    at org.springframework.messaging.handler.invocation.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:171) ~[spring-messaging-5.1.8.RELEASE.jar:5.1.8.RELEASE]
    at org.springframework.messaging.handler.invocation.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:120) ~[spring-messaging-5.1.8.RELEASE.jar:5.1.8.RELEASE]
    at org.springframework.amqp.rabbit.listener.adapter.HandlerAdapter.invoke(HandlerAdapter.java:50) ~[spring-rabbit-2.1.7.RELEASE.jar:2.1.7.RELEASE]
    at org.springframework.amqp.rabbit.listener.adapter.MessagingMessageListenerAdapter.invokeHandler(MessagingMessageListenerAdapter.java:196) ~[spring-rabbit-2.1.7.RELEASE.jar:2.1.7.RELEASE]
    ... 26 common frames omitted
阅读 2.2k
1 个回答

试试改成

        Long deliveryTag = Long.parseLong( headers.get(AmqpHeaders.DELIVERY_TAG));// 获取消息序号

返回的就String类型,不能强制转换成Long

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题