2017-02-22 11 views
0

最新のSpring 4とActiveMQを使用してJMSメッセージをキューに入れています。 JMSTemplateを使用すると、既定のキューがあり、サンプルコードを使用すると、問題なしで既定のキューにメッセージを置くことができます。また、私は宛先にメッセージを置くことができるサンプルコードがあります...これは私がハングアップしているところです。SpringとJMS DynamicDestinationResolution

オリジナルの方法:私は先を持っている場合は、

public void send(final Destination dest,final String text) { 

this.jmsTemplate.send(dest,new MessageCreator() { 
    @Override 
    public Message createMessage(Session session) throws JMSException { 
    Message message = session.createTextMessage(text); 
    return message; 
    } 
}); 
} 

私はそれを渡すことができ、それが動作するはずですが、私はまだ試していません。私が本当にやりたいことは、名前やトピックの文字列を渡すことです。ここで

は、私が好きなものです:

public void send(final String destination,final String text) { 

    Destination dest = getDestinationFromString(destination); 

    if(dest != null) { 

    this.jmsTemplate.send(dest,new MessageCreator() { 
    @Override 
     public Message createMessage(Session session) throws JMSException { 
     Message message = session.createTextMessage(text); 
     return message; 
     } 
    }); 
    } 
} 

キューまたはトピックは、そうでない場合はnullを返し、その先を返し、存在する場合。

一時的なキューやトピックは必要ありません。新しいキューやトピックを作成中ではありません。このSpringアプリケーションでは、JNDIも使用していません。 ActiveMQ web-adminツールを使用してトピックやキューを作成します。

私は、私が記述したような方法の例を探していました。私がここに来る前にネットを洗ってしまい、この質問を投稿する前にまずここを見ました。誰かが私にいくつかのドキュメントやこれに対応するコードスニペットを持つサイトを紹介することができれば、それは素晴らしいことです。

ありがとうございました!

答えて

0

私は何もする必要はありませんでした。ここに私のActiveMQは、コンテキストxmlファイルで定義されている方法です。

<!-- =============================================== --> 
<!-- JMS Common, Define JMS connectionFactory --> 
<!-- =============================================== --> 
<!-- Activemq connection factory --> 
<bean id="amqConnectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory"> 
    <!-- brokerURL, You may have different IP or port --> 
    <constructor-arg index="0" value="${message.broker.url}" /> 
</bean> 

<!-- Pooled Spring connection factory --> 
<bean id="jmsConnectionFactory" 
    class="org.springframework.jms.connection.CachingConnectionFactory"> 
    <constructor-arg ref="amqConnectionFactory" /> 
</bean> 

<!-- ======================================================= --> 
<!-- JMS Send, define default destination and JmsTemplate --> 
<!-- ======================================================= --> 
<!-- Default Destination Queue Definition --> 
<bean id="defaultDestination" class="org.apache.activemq.command.ActiveMQQueue"> 
    <!-- name of the queue --> 
    <constructor-arg index="0" value="${default.message.queue}" /> 
</bean> 

<bean id="jmsDestinationResolver" class="org.springframework.jms.support.destination.DynamicDestinationResolver"/> 

<!-- JmsTemplate Definition --> 
<bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate"> 
    <property name="connectionFactory" ref="jmsConnectionFactory"/> 
    <property name="defaultDestination" ref="defaultDestination" /> 
    <property name="destinationResolver" ref="jmsDestinationResolver"/> 
    <property name="pubSubDomain" value="${pub.sub.domain}"/> 
    <property name="receiveTimeout" value="${receive.timeout}"/> 
</bean> 

私は「jmsTemplate」の下に異なった方法で探していた私は、宛先名の文字列を持つ.send方法があった実現しませんでした。私は最初のパラメータとしてDestinationを持つsendメソッドがあることを知っていました。だから、本当に問題はなかった。このメソッドは正常に動作します。

public void sendToDestination(final String destination, final MyObjectDTO myObject) throws JMSException { 
    this.jmsTemplate.send(destination, new MessageCreator() { 
     @Override 
     public Message createMessage(Session session) throws JMSException { 
      Message message = session.createObjectMessage(myObject); 
      return message; 
     } 
    }); 
    return success; 
} 

これは誰かを助けることを望みます。

関連する問題