2010-06-01 36 views
8

Tôi có một ví dụ làm việc để gửi tin nhắn đến máy chủ và máy chủ nhận tin nhắn qua tin nhắn qpid. Đây là đơn giản hello world để gửi đến máy chủ:Java JMS Messaging

http://pastebin.com/M7mSECJn

Và đây là máy chủ mà nhận được yêu cầu và gửi câu trả lời (khách hàng hiện tại không nhận được trả lời):

http://pastebin.com/2mEeuzrV

đây là tệp thuộc tính của tôi:

http://pastebin.com/TLEFdpXG

Tất cả chúng hoạt động hoàn hảo, tôi có thể thấy các thông điệp trong hàng đợi qpid thông qua giao diện quản lý Qpid JMX. Những ví dụ này được tải xuống từ https://svn.apache.org/repos/asf/qpid/trunk/qpid/java/client/example (ai đó cũng có thể cần nó).

Tôi đã thực hiện nhắn tin Jboss bằng cách sử dụng mùa xuân trước, nhưng tôi không thể quản lý để làm tương tự với qpid. Với JBoss bên applicationsContext tôi đã đậu jndiTemplate, conectionFactory, destinationQueue, và jmscontainer như thế này:

<!-- 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> 

và tất nhiên người gửi và người nghe:

<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" /> 

Bây giờ tôi muốn viết lại ví dụ qpid này sử dụng logic bối cảnh mùa xuân. Ai giúp tôi với?

Trả lời

1

Spring cung cấp lớp JmsTemplate. Kiểm tra this trang web hiện ra rằng có một ví dụ về làm thế nào để thiết lập mẫu (với ActiveMQ)

Ví dụ cụ thể của bạn cố gắng thay thế jmsContainer này:

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

Bạn cũng sẽ phải thay đổi mã của bạn để sử dụng các JmsTemplate mùa xuân:

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); 
    } 
} 

Ngoài ra còn có tài liệu tốt trên trang web SpringSource cho this

+0

vì vậy, rry Tôi không thể cấu hình appcontext mùa xuân đúng cách bạn có thể xin vui lòng gửi cấu hình đậu khác cho ví dụ của bạn nó không phải là cho tôi vì vậy tôi chỉ có thể xem mẫu sau đó thực hiện trong tôi – London