Java JMS 消息传递

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中,我有像jndiTemplate、conectionFactory、destinationQueue和jmscontainer这样的bean:
<!-- 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示例。有人能帮我吗?

1个回答

1

Spring提供JmsTemplate类。查看this网站,其中有设置模板的示例(使用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网站上也有关于this的良好文档。


抱歉,我无法正确配置 Spring 应用上下文,请你能否提供其他配置 bean 的示例?它不必与我的相同,只要让我可以看到样例,然后在我的项目中实现即可。 - London

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接