有了Spring4 + ActiveMQ,我想从队列接收JMS消息,并自动转换为POJO.所以我添加MappingJackson2MessageConverter到DefaultJmsListenerContainerFactory
@Bean
public DefaultJmsListenerContainerFactory jmsListenerContainerFactory() {
DefaultJmsListenerContainerFactory factory = new DefaultJmsListenerContainerFactory();
// some other config
MappingJackson2MessageConverter converter = new MappingJackson2MessageConverter();
converter.setTargetType(MessageType.TEXT);
converter.setTypeIdPropertyName("???");
factory.setMessageConverter(converter);
return factory;
}
Run Code Online (Sandbox Code Playgroud)
这是我的Listener配置
@JmsListener(destination = "queue.fas.flight.order", containerFactory = "jmsListenerContainerFactory")
public void processOrder(OrderRegisterDto registerParam) {
System.out.println(registerParam.toString());
}
Run Code Online (Sandbox Code Playgroud)
问题是,我不知道如何设置TypeIdPropertyName.队列不在我的控制之下,其他人发送JSON给它.
我想要一个普通的转换器.所以我使用String接收消息,并手动将其转换为POJO.
Spring4 + ActiveMQ
还有更好的方法吗?
这是java中典型的CLH-Lock:
public class CLHLock{
private final AtomicReference tail;
// why we need this node?
private final ThreadLocal myPred;
private final ThreadLocal myNode;
public CLHLock() {
tail = new AtomicReference(new QNode());
myNode = new ThreadLocal() {
protected QNode initialValue() {
return new QNode();
}
};
myPred = new ThreadLocal();
}
public void lock() {
QNode node = myNode.get();
node.locked = true;
QNode pred = tail.getAndSet(node);
// this.myPred == pred
myPred.set(pred);
while (pred.locked) {
}
}
public void unlock() {
QNode node …Run Code Online (Sandbox Code Playgroud)