我正在为应用程序进行原型设计,以测试未来应用程序的弹出消息传递功能。
我知道我们需要的一件事是在同一个应用程序中处理来自activemq的主题和队列。因此,在同一个bean中,我应该有一个@JmsListener注释的方法,它将听到一个队列,另一个会听到一个主题。那可能吗?
更简单的方法是什么?我看到了一些使用spring-jms(如this one)的主题的答案,但在这种情况下,我想我需要创建两个DefaultMessageListenerContainer,一个用于主题,另一个用于队列。这是最好的解决方案吗?
此问题是否有任何注释方法?
答案 0 :(得分:4)
以下是如何使用spring boot设置第二个容器工厂的完整示例:
JmsDemoApplication.java:
import tensorflow as tf
a = tf.Variable([0.1, 0.5])
b = tf.Variable([0.2, 0.6])
auc = tf.contrib.metrics.streaming_auc(a, b)
sess = tf.Session()
sess.run(tf.initialize_all_variables())
sess.run(tf.initialize_local_variables()) # try commenting this line and you'll get the error
train_auc = sess.run(auc)
print(train_auc)
MessageListenerBean.java:
package net.lenthe;
import javax.jms.ConnectionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
import org.springframework.jms.config.DefaultJmsListenerContainerFactory;
@SpringBootApplication
public class JmsDemoApplication {
@Autowired
private ConnectionFactory connectionFactory;
@Bean(name = "topicJmsListenerContainerFactory")
public DefaultJmsListenerContainerFactory getTopicFactory() {
DefaultJmsListenerContainerFactory f = new DefaultJmsListenerContainerFactory();
f.setConnectionFactory(connectionFactory);
f.setSessionTransacted(true);
f.setPubSubDomain(true);
return f;
}
public static void main(String[] args) {
SpringApplication.run(JmsDemoApplication.class, args);
}
}
答案 1 :(得分:1)
框架将负责为每个@JmsListener
创建一个容器;您只需要通过containerFactory
属性告诉它使用哪个容器工厂。