Утешение: неизвестная конечная точка темы - PullRequest
0 голосов
/ 12 декабря 2018

Я пытаюсь создать долговечные конечные точки.Я использую 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]

Создана недолговечная конечная точка без проблем.Я реализовал несколько JUnits для тестирования долговечных конечных точек.(все были успешными).Разница была в том, что я создаю свою фабрику соединений:

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

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

Я не понимаю.Чего мне не хватает?Если это проблема безопасности (например, у меня нет разрешений, почему я могу создавать темы длительного пользования из моих Junits?)

1 Ответ

0 голосов
/ 13 декабря 2018

Похоже, что тема, на которую вы подписываетесь, - «testTopic», но имя конечной точки Durable Topic, к которой привязывается клиент, - «Test».Требуется предоставить конечную точку Durable Topic с именем Test в брокере сообщений Solace PubSub +, чтобы клиент мог с ней связаться.После подготовки подписка темы «testTopic» будет применена к конечной точке, когда клиенты будут привязаны к ней, и клиент получит все сообщения, опубликованные в этой теме.

Дополнительные сведения о подготовке темы длительного пользованияКонечная точка доступна здесь: https://docs.solace.com/Configuring-and-Managing/Configuring-DTEs.htm

Конечная точка недолговременной темы отличается от конечной точки долговременной темы тем, что она динамически создается клиентскими приложениями и сохраняется только в посреднике сообщений, пока сеанс клиента подключен.Вот почему вы можете без проблем создать конечную точку непродолжительной темы.

...