使用rabbit接收短信发送验证码 调用sms服务问题

Blade 未结 1 1802
hhq啊
hhq啊 剑圣 2020-08-02 17:10
悬赏:10

一、该问题的重现步骤是什么?

1. 我在blade-user 服务作为消息生产者 生成了验证码code 和传递 手机号 phone 到rabbitmq,blade-resource 服务作为消费者 能正常接收改消息。

2. 当我想调用短信的smsbuilder 发送短信时 就提示 拿不到 tenantId

image.png

3.直接导致空指针异常

image.png

4.我把rabbit工程的监听类复制到 blade-resource工程上 能够从队列中拿到消息

image.png

5.blade-user

image.png

二、你期待的结果是什么?实际看到的又是什么?

如果是直接调用 短信发送的接口 tenantId是有值的,在resource工程使用监听类之后 拿不到值导致空指针


按照以往的实现是直接在监听类调用阿里的短信接口,。。。有没有其他的实现思路?就是监听类 能够调用短信发送的方法。。。

三、你正在使用的是什么产品,什么版本?在什么操作系统上?


四、请提供详细的错误堆栈信息,这很重要。

org.springframework.amqp.rabbit.listener.exception.ListenerExecutionFailedException: Listener method 'public void org.springblade.resource.handler.DirectQueueOneHandler.directHandlerManualAck(java.util.Map<java.lang.String, java.lang.String>,org.springframework.amqp.core.Message,com.rabbitmq.client.Channel)' threw exception

at org.springframework.amqp.rabbit.listener.adapter.MessagingMessageListenerAdapter.invokeHandler(MessagingMessageListenerAdapter.java:204)

at org.springframework.amqp.rabbit.listener.adapter.MessagingMessageListenerAdapter.onMessage(MessagingMessageListenerAdapter.java:129)

at org.springframework.amqp.rabbit.listener.AbstractMessageListenerContainer.doInvokeListener(AbstractMessageListenerContainer.java:1542)

at org.springframework.amqp.rabbit.listener.AbstractMessageListenerContainer.actualInvokeListener(AbstractMessageListenerContainer.java:1468)

at org.springframework.amqp.rabbit.listener.AbstractMessageListenerContainer.invokeListener(AbstractMessageListenerContainer.java:1456)

at org.springframework.amqp.rabbit.listener.AbstractMessageListenerContainer.doExecuteListener(AbstractMessageListenerContainer.java:1451)

at org.springframework.amqp.rabbit.listener.AbstractMessageListenerContainer.executeListener(AbstractMessageListenerContainer.java:1400)

at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer.doReceiveAndExecute(SimpleMessageListenerContainer.java:875)

at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer.receiveAndExecute(SimpleMessageListenerContainer.java:859)

at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer.access$1600(SimpleMessageListenerContainer.java:78)

at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer$AsyncMessageProcessingConsumer.mainLoop(SimpleMessageListenerContainer.java:1142)

at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer$AsyncMessageProcessingConsumer.run(SimpleMessageListenerContainer.java:1048)

at java.lang.Thread.run(Thread.java:748)

Caused by: java.lang.NullPointerException: null

at java.util.Objects.requireNonNull(Objects.java:203)

at org.springblade.core.tool.utils.WebUtil.getParameter(WebUtil.java:238)

at org.springblade.resource.builder.sms.SmsBuilder.getSms(SmsBuilder.java:126)

at org.springblade.resource.builder.sms.SmsBuilder.template(SmsBuilder.java:90)

at org.springblade.resource.builder.sms.SmsBuilder.template(SmsBuilder.java:79)

at org.springblade.resource.handler.DirectQueueOneHandler.directHandlerManualAck(DirectQueueOneHandler.java:57)

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

at java.lang.reflect.Method.invoke(Method.java:498)

at org.springframework.messaging.handler.invocation.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:171)

at org.springframework.messaging.handler.invocation.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:120)

at org.springframework.amqp.rabbit.listener.adapter.DelegatingInvocableHandler.invoke(DelegatingInvocableHandler.java:130)

at org.springframework.amqp.rabbit.listener.adapter.HandlerAdapter.invoke(HandlerAdapter.java:61)

at org.springframework.amqp.rabbit.listener.adapter.MessagingMessageListenerAdapter.invokeHandler(MessagingMessageListenerAdapter.java:196)

... 12 common frames omitted

五、若有更多详细信息,请在下面提供。

1条回答
  • mq需要单独自己处理一下,把租户id也从消息里面带过来,重载一下template这个方法,加个租户id的参数。

    image.png

    0 讨论(0)
提交回复