使用 pubsub MessageReceiver 时如何解决空指针异常

问题描述 投票:0回答:0

我有基于java调度程序的实现来读取gcp pubsub msg,但后来我更改了相同的方法以使用gcp pubsub MessageReceiver来异步侦听和读取消息。

//实现MessageReceiver的类包含代码

 @Override
    public void receiveMessage( PubsubMessage message, AckReplyConsumer ackReplyConsumer ) {
        //some code
        processMsg( message, blobs, profiler, ackConsumer );
    }
        
    private void processMsg( PubsubMessage message, Page<Blob> blobs, Profiler profiler, AckReplyConsumer ackConsumer ) {
        setContext("id");
    }
    
     private void setContext( String id ) {
        UserContext userContext = UserContext.getContext();
        // when I change implementation to- use MessageReceiver instead of scheduler, I am getting userContext=null here;
     }
     
 

//类 UserContext{

 private static final ThreadLocal<UserContext> threadLocal = new ThreadLocal<UserContext>();
 
 public static UserContext getContext() {
    try {
        final UserContext userContext = threadLocal.get();
        if ( null != userContext ) {
            return (UserContext)userContext.clone();
        }
    } catch( CloneNotSupportedException e ) {
    }
    return null;
}

}

当我们调用UserContext.getContext()时如何获取userContext=notNull。我是线程新手,所以不知道如何解决这个空指针。

java spring-boot multithreading thread-safety google-cloud-pubsub
© www.soinside.com 2019 - 2024. All rights reserved.