62,614
社区成员
发帖
与我相关
我的任务
分享
<bean id="connectionFactory" class="org.apache.activemq.pool.PooledConnectionFactory"
destroy-method="stop">
<property name="connectionFactory">
<bean class="org.apache.activemq.ActiveMQConnectionFactory">
<property name="brokerURL"
value="failover:(tcp://10.60.60.107:61616?wireFormat.maxInactivityDuration=0)&maxReconnectDelay=1000" />
</bean>
</property>
<!-- 连接数 -->
<property name="maxConnections" value="1" />
<!-- Session总数 -->
<property name="maximumActive" value="500" />
</bean>
<bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">
<property name="connectionFactory" ref="connectionFactory" />
<!--
<property name="defaultDestination" ref="oamTmpTopic" />
-->
<property name="explicitQosEnabled" value="true" />
<!-- 1为非持久化,2为持久化 -->
<property name="deliveryMode" value="1" />
</bean>
@Override
public void convertAndSend(Event message) {
// build ConnectionFactory And Queue is necessary
buildConnectionFactoryAndQueue();
Connection connect = null;
Session session = null;
MessageProducer producer = null;
try {
connect = jmsConnectionFactory.createConnection();
session = connect.createSession(false, Session.DUPS_OK_ACKNOWLEDGE);
producer = session.createProducer(queue);
// create a JMS message and send it
ObjectMessage objMsg = session.createObjectMessage(message);
// set message selector
String messageSelector = message.getMessageSelector();
objMsg.setStringProperty("messageReceiver", messageSelector);
producer.send(objMsg);
} catch (JMSException e) {
String errorMessage = "JMSException while queueing HTTP JMS Message";
throw new EventRuntimeException(errorMessage, e);
} finally {
SafeCloseUtil.close(producer); // 这里关闭 producer
SafeCloseUtil.close(session); // 这里关闭 producer
SafeCloseUtil.close(connect);
}
}
服务端只需要实现MessageListener的onMessage,客户端的 session服务端根本不知道,也无法关闭。
@Override
public void onMessage(Message message) {
printLogMessage("start public function onMessage()..");
try {
if (message instanceof ObjectMessage) {
ObjectMessage objMsg = (ObjectMessage) message;
Event event = (Event) objMsg.getObject();
// if Re deliver message warn the message
if (message.getJMSRedelivered()) {
log.warn("...", event.getClass().getSimpleName());
}
// out Put Event Log
outPutEventLog(event);
// dispatch Event
dispatchEvent(event);
} else {
log.error("This MDB message was not instance of ObjectMessage; ignoring.");
}
printLogMessage("end public function onMessage()..");
} catch (JMSException e) {
String errorMessage = "JMS Exception while Listener message.errorMessage:"
+ e.getMessage();
log.error(errorMessage);
throw new EventRuntimeException(errorMessage, e);
}
}