安慰:未知的持久主题端点

时间:2018-12-12 16:35:42

标签: spring-boot gradle apache-camel jms-topic solace

我正在尝试创建持久端点。我正在使用solace-jms-spring-boot-starter。

我如何尝试:

amqp:topic:testTopic?clientId=1&durableSubscriptionName=Test&subscriptionDurable=true

OR

@Autowired
private JmsTemplate jmsTemplate;
final ConnectionFactory connectionFactory1 = jmsTemplate.getConnectionFactory();
final Connection connection1 = connectionFactory1.createConnection();
final int sessionAcknowledgeMode = jmsTemplate.getSessionAcknowledgeMode();
Session session = connection1.createSession(false, Session.AUTO_ACKNOWLEDGE);
final Topic topic = session.createTopic(testTopic);
session.createDurableSubscriber(topic,"Test","",true);

该主题未创建,我无法在SolAdmin中看到它。然后,我手动创建了持久主题“ testTopic”。但是我无法创建订户。 我有以下错误:

org.apache.camel.spring.boot.CamelSpringBootInitializationException: javax.jms.JMSSecurityException: Error creating consumer - unknown endpoint (503: Unknown Durable Topic Endpoint)
at org.apache.camel.spring.boot.RoutesCollector.onApplicationEvent(RoutesCollector.java:133) ~[camel-spring-boot-2.20.2.jar:2.20.2]
at org.apache.camel.spring.boot.RoutesCollector.onApplicationEvent(RoutesCollector.java:57) ~[camel-spring-boot-2.20.2.jar:2.20.2]
at org.springframework.context.event.SimpleApplicationEventMulticaster.doInvokeListener(SimpleApplicationEventMulticaster.java:172) ~[spring-context-4.3.14.RELEASE.jar:4.3.14.RELEASE]
...
Caused by: com.solacesystems.jcsmp.JCSMPErrorResponseException: 503: Unknown Durable Topic Endpoint
at com.solacesystems.jcsmp.impl.flow.BindRequestTask.execute(BindRequestTask.java:161) ~[sol-jms-10.5.0.jar:na]
at com.solacesystems.jcsmp.impl.flow.SubFlowManagerImpl.handleAssuredCtrlMessage(SubFlowManagerImpl.java:534) ~[sol-jms-10.5.0.jar:na]
at com.solacesystems.jcsmp.protocol.impl.TcpClientChannel.handleAssuredCtrlMsg(TcpClientChannel.java:1640) ~[sol-jms-10.5.0.jar:na]
at com.solacesystems.jcsmp.protocol.impl.TcpClientChannel.handleMessage(TcpClientChannel.java:1608) ~[sol-jms-10.5.0.jar:na]
at com.solacesystems.jcsmp.protocol.nio.impl.SubscriberMessageReader.processRead(SubscriberMessageReader.java:98) ~[sol-jms-10.5.0.jar:na]

创建的非持久性端点没有问题。 我已经实现了一些JUnit,以测试持久性端点。 (全部成功)。区别在于我正在创建我的connectionFactory:

JmsConnectionFactory connectionFactory = new JmsConnectionFactory(username, password, url);

AMQPComponent amqp = new AMQPComponent();
amqp.setConnectionFactory(connectionFactory);
context.addComponent("amqp", amqp);

我不明白。我想念什么?如果这是一个安全问题(例如我没有权限,为什么我可以通过Junit创建持久主题?)

1 个答案:

答案 0 :(得分:1)

看起来您要订阅的主题是“ testTopic”,但是客户端绑定到的“持久主题端点”的名称是“ Test”。需要在Solace PubSub +消息代理上提供一个名为Test的持久主题端点,以便客户端绑定到它。设置后,主题 当客户端绑定到端点时,订阅“ testTopic”将应用于端点,并且客户端将收到发布到该主题的所有消息。

有关提供持久主题端点的更多信息,请参见: https://docs.solace.com/Configuring-and-Managing/Configuring-DTEs.htm

非持久主题端点与持久主题端点的不同之处在于,它是由客户端应用程序动态创建的,并且仅在连接客户端会话时才保留在消息代理上。这就是为什么您可以毫无问题地创建非持久主题端点的原因。