ActiveMQ을 사용하여 일부 이벤트에 대한 JMS 메시지를 보내는 메시지 생성자가 있습니다. 그러나 ActiveMQ에 대한 연결이 항상 켜져 있지 않을 수 있습니다. 따라서 이벤트가 저장되고 연결이 설정되면 읽기 및 전송되는 것으로 가정합니다. 여기 내 코드입니다 :JMS 연결이 설정되면 어떻게 잡을 수 있습니까?
private void sendAndSave(MyEvent event) {
boolean sent = sendMessage(event);
event.setProcessed(sent);
boolean saved = repository.saveEvent(event);
if (!sent && !saved) {
logger.error("Change event lost for Id = {}", event.getId());
}
}
private boolean sendMessage(MyEvent event) {
try {
messenger.publishEvent(event);
return true;
} catch (JmsException ex) {
return false;
}
}
내가 연결이 설정 및 프로세스 보내지 않은 사건 때 호출됩니다
어떤 종류의 ApplicationEventListener를 만들 싶습니다
. JMS, Spring 프레임 워크 및 ActiveMQ 문서를 살펴 봤지만 ConnectionFactory를 사용하여 리스너를 연결하는 방법을 찾을 수 없습니다.
누군가 나를 도울 수 있으면 크게 감사하겠습니다. 여기
내 응용 프로그램 Spring 컨텍스트가 JMS에 대해 말씀입니다 :
<!-- Connection factory to the ActiveMQ broker instance. -->
<!-- The URI and credentials must match the values in activemq.xml -->
<!-- These credentials are shared by ALL producers. -->
<bean id="jmsTransportListener" class="com.rhd.ams.service.common.JmsTransportListener"
init-method="init" destroy-method="cleanup"/>
<bean id="amqJmsConnectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory">
<property name="brokerURL" value="${jms.publisher.broker.url}"/>
<property name="userName" value="${jms.publisher.username}"/>
<property name="password" value="${jms.publisher.password}"/>
<property name="transportListener" ref="jmsTransportListener"/>
</bean>
<!-- JmsTemplate, by default, will create a new connection, session, producer for -->
<!-- each message sent, then close them all down again. This is very inefficient! -->
<!-- PooledConnectionFactory will pool the JMS resources. It can't be used with consumers.-->
<bean id="pooledAmqJmsConnectionFactory" class="org.apache.activemq.pool.PooledConnectionFactory" destroy-method="stop">
<property name="connectionFactory" ref="amqJmsConnectionFactory" />
</bean>
<!-- Although JmsTemplate instance is unique for each message, it is -->
<!-- thread-safe and therefore can be injected into referenced obj's. -->
<bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">
<constructor-arg ref="pooledAmqJmsConnectionFactory"/>
</bean>
당신이 정교하게 설정해야합니다. 장애 조치 전송 등을 사용하고 있습니까? –
원본 메시지에 Spring app context를 추가했습니다. –
연결 URI를 생략하기 때문에 여전히 쓸모가 없습니다. –