我有基于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。我是线程新手,所以不知道如何解决这个空指针。