You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@activemq.apache.org by alexpeng <pe...@hotmail.com> on 2008/03/20 20:02:57 UTC

activemq5.0,why can not recieve failure message.


question:

After I send message, I recieve it, then email this message using
processMsgInfo() function.
after that, I disconnect the network,then send message,processMsgInfo has
error,because it can not connect email server, the system gives me
information that can not send. but the message i can not find it in
database. why? 
I think it should be in database, when I reconnect network, the message
should be resend. 
Is there some thing wrong with my configuration. 


environment: activemq5.0, tomcat6, spring2.05. mysql5(localhost database)

applicationContext-jmx.xml 

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:amq="http://activemq.org/config/1.0"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://www.springframework.org/schema/beans 
         http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
         http://activemq.org/config/1.0
http://activemq.apache.org/schema/core/activemq-core-5.0.0.xsd">

	<bean id="connectionFactory"
class="org.apache.activemq.ActiveMQConnectionFactory">
		<property name="brokerURL" value="vm://localhost" />
		<property name="redeliveryPolicy">
			<bean class="org.apache.activemq.RedeliveryPolicy">
  				<property name="backOffMultiplier" value="2" /> 
  				<property name="initialRedeliveryDelay" value="10" /> 
  				<property name="maximumRedeliveries" value="3" /> 
  				<property name="useExponentialBackOff" value="true" /> 
  			</bean>
  		</property>
	</bean>

	<bean id="msgDestination"
class="org.apache.activemq.command.ActiveMQQueue">
		<constructor-arg index="0" value="myQueue" />
	</bean>

	<!-- Message converter bean -->
	<bean id="msgConverter" class="com.golemur.jms.MsgMessageConverter" />

	<!-- The JmsTemplate -->
	<bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">
		<property name="connectionFactory">
		     <bean
class="org.springframework.jms.connection.SingleConnectionFactory">
        		<property name="targetConnectionFactory">
          			<ref local="connectionFactory" />
        		</property>
      		</bean>
		</property>
		<property name="defaultDestination" ref="msgDestination" />
		<property name="messageConverter" ref="msgConverter"></property>
		<property name="receiveTimeout" value="60000" />
	</bean>

	<!-- JMS transaction manager -->
	<bean id="jmsTransactionManager"
class="org.springframework.jms.connection.JmsTransactionManager">
		<property name="connectionFactory" ref="connectionFactory" />
	</bean>

	<!-- DefaultMessageListenerContainer-->

	<bean
class="org.springframework.jms.listener.DefaultMessageListenerContainer">
		<property name="connectionFactory" ref="connectionFactory" />
		<property name="destination" ref="msgDestination" />
		<property name="concurrentConsumers" value="1" />
		<property name="messageListener" ref="msgMdp" />
		<property name="sessionAcknowledgeModeName" value="CLIENT_ACKNOWLEDGE"/>
		<property name="transactionManager" ref="jmsTransactionManager" />
		<property name="receiveTimeout" value="-1"/>
	</bean>

	<!-- message sender beans -->
	<bean id="msgMessageImpl" class="com.golemur.jms.MsgMessageImpl">
		<property name="jmsTemplate" ref="jmsTemplate" />
		<property name="destination" ref="msgDestination" />
	</bean>

    <bean id="messageProducer" class="com.golemur.jms.MessageProducer">
		<property name="msgMessageImpl">
			<ref bean="msgMessageImpl" />
		</property>
	</bean>

	<!-- MessageMdp-->
	<bean id="msgMdp" class="com.golemur.jms.MessageMdp" />

	<!-- 
	<bean id="pureMdp"
class="org.springframework.jms.listener.adapter.MessageListenerAdapter">
    	<property name="delegate" ref="msgMdp" />
    	<property name="defaultListenerMethod" value="processMsgInfo" />
    	<property name="messageConverter" ref="msgConverter" />
  	</bean>
	-->
</beans>


applicationContext-jmx.xml   this is for the broker

<?xml version="1.0" encoding="UTF-8"?>
<beans 
  xmlns="http://www.springframework.org/schema/beans" 
  xmlns:amq="http://activemq.org/config/1.0"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
  http://activemq.org/config/1.0
http://activemq.apache.org/schema/core/activemq-core-5.0.0.xsd">

  <amq:broker useJmx="true" persistent="true"> 
    <amq:persistenceAdapter> 
        <amq:jdbcPersistenceAdapter dataSource="#mysql-ds"/> 
        <!-- 
      	<journaledJDBC journalLogFiles="5"
dataDirectory="${basedir}/activemq-data" dataSource="#mysql-ds"/>
       	-->
      </amq:persistenceAdapter> 
    <amq:transportConnectors> 
       <amq:transportConnector
uri="tcp://localhost:0?broker.persistent=true"/> 
    </amq:transportConnectors> 
   </amq:broker>
  
  <!-- MySql DataSource Setup -->
  <bean id="mysql-ds" class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">
    <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
    <property name="url"
value="jdbc:mysql://localhost/activemq?relaxAutoCommit=true"/>
    <property name="username" value="activemq"/>
    <property name="password" value="activemq"/>
    <property name="poolPreparedStatements" value="true"/>
  </bean>
</beans>


messageMDP.java for asychronized to recieve the message. 
	public void onMessage(Message message) {

		try {
			System.out.println("delivermode::" + message.getJMSDeliveryMode());

			if (message.getJMSRedelivered()) {
				log.error("This message was redelivered:" + message);
			} else {

				MapMessage mapMessage = (MapMessage) message;
				mapMessage.setJMSDeliveryMode(DeliveryMode.PERSISTENT);

				MessageVO msg = new MessageVO();
				msg.setMsgType(mapMessage.getString("msgType"));
				msg.setFromUser(mapMessage.getString("fromUser"));
				msg.setToUser(mapMessage.getString("toUser"));
				msg.setMessage(mapMessage.getString("message"));
				msg.setTime(mapMessage.getString("time"));
				msg.setEmail(mapMessage.getString("email"));
				msg.setTitle(mapMessage.getString("title"));

				processMsgInfo(msg);

			}
			message.acknowledge();
		} catch (JMSException e) {
			log.error("Jms error:::" + e.getMessage());
		} catch (Exception e) {
			log.error("MsgInfo error:::" + e.getMessage());
		}
	}

thanks

Alex

-- 
View this message in context: http://www.nabble.com/activemq5.0%2Cwhy-can-not-recieve-failure-message.-tp16186330s2354p16186330.html
Sent from the ActiveMQ - User mailing list archive at Nabble.com.