8

メッセージをサーバーに送信し、サーバーがqpidメッセージングを介してメッセージを受信する実際の例があります。サーバーに送信する単純な hello world は次のとおりです。

http://pastebin.com/M7mSECJn

そして、ここにリクエストを受信して​​レスポンスを送信するサーバーがあります(現在のクライアントはレスポンスを受信しません):

http://pastebin.com/2mEeuzrV

ここに私のプロパティファイルがあります:

http://pastebin.com/TLEFdpXG

それらはすべて完全に機能し、Qpid JMX 管理コンソールを介して qpid キュー内のメッセージを確認できます。これらの例は、https://svn.apache.org/repos/asf/qpid/trunk/qpid/java/client/exampleからダウンロードされます(誰かがそれを必要とするかもしれません)。

以前にSpringを使用してJbossメッセージングを行ったことがありますが、qpidで同じことを行うことができません。applicationsContext 内の jboss では、次のような Bean jndiTemplate、conactionFactory、destinationQueue、および jmscontainer がありました。

<!-- Queue configuration -->
 <bean id="jndiTemplate" class="org.springframework.jndi.JndiTemplate">
  <property name="environment">
   <props>
    <prop key="java.naming.factory.initial">org.jnp.interfaces.NamingContextFactory</prop>
    <prop key="java.naming.provider.url">jnp://localhost:1099</prop>
    <prop key="java.naming.factory.url.pkgs">org.jboss.naming:org.jnp.interfaces</prop>
    <prop key="java.naming.security.principal">admin</prop>
    <prop key="java.naming.security.credentials">admin</prop>
   </props>
  </property>
 </bean>

 <bean id="connectionFactory" class="org.springframework.jndi.JndiObjectFactoryBean">
  <property name="jndiTemplate" ref="jndiTemplate" />
  <property name="jndiName" value="ConnectionFactory" />
 </bean>

 <bean id="queueDestination" class="org.springframework.jndi.JndiObjectFactoryBean">
  <property name="jndiTemplate" ref="jndiTemplate" />
  <property name="jndiName">
   <value>queue/testQueue</value>
  </property>
 </bean>

  <bean id="jmsContainer"
  class="org.springframework.jms.listener.DefaultMessageListenerContainer">
  <property name="connectionFactory" ref="connectionFactory" />
  <property name="destination" ref="queueDestination" />
  <property name="messageListener" ref="listener" />
 </bean>

そしてもちろん送信者とリスナー:

 <bean id="sender" class="com.practice.Sender">
  <property name="connectionFactory" ref="connectionFactory" />
  <property name="queueDestination" ref="queueDestination" />
 </bean>


 <bean id="listener" class="com.practice.MsgListener" />

ここで、Spring コンテキスト ロジックを使用して、この qpid の例を書き直したいと思います。誰でも私を助けることができますか?

4

1 に答える 1

1

Spring は JmsTemplate クラスを提供します。テンプレートを設定する方法の例があるこのWebサイトを確認してください(activemqを使用)

特定の例では、jmsContainerこれを置き換えてみてください:

<bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">
  <property name="connectionFactory" ref="connectionFactory" />
</bean>

また、Spring JmsTemplate を使用するようにコードを変更する必要があります。

public class MessageSender  {

    private Destination destination;
    private JmsTemplate jmsTemplate;

    public void setJmsTemplate(JmsTemplate jmsTemplate)  {
        this.jmsTemplate = jmsTemplate;
    }

    public void setDestination(Destination destination) {
        this.destination = destination;
    }

    public void sendMessage() { 
        MessageCreator creator = new MessageCreator() {
            public Message createMessage(Session session) {
                TextMessage message = null;
                try  {
                    message = session.createTextMessage();
                    message.setStringProperty("text", "Hello, World!");
                }
                catch (JMSException e) {
                    e.printStackTrace();
                }
                return message;
            }
        };  
    jmsTemplate.send(destination, creator);
    }
}

これについては、springsource サイトにも優れたドキュメントがあります。

于 2010-06-03T10:54:08.730 に答える