2015-06-16 14 views
6

Tôi đang cố gắng để làm cho WebMQ hành đồng bộ trong Mule để biến các hàng đợi thông điệp vào một api REST cho một dự án nội bộ. Thật không may, tôi biết rất ít về MULE.Làm WebMQ Synchronous

Sau một chút công việc, tôi bắt đầu hiểu phạm vi Yêu cầu-Trả lời và cố gắng sử dụng Trình kết nối WMQ với nó, chỉ để tìm ra rằng WMQ chỉ gửi khi luồng đã kết thúc.

Tôi đã thử đặt theo yêu cầu vào một dòng chảy khác nhau sử dụng máy ảo để kích hoạt nó

nhưng cho đến nay mà chỉ dẫn đến nó chờ đợi mãi mãi trên WMQ rằng sẽ không bao giờ xảy ra.

Tôi cũng đã cố gắng sử dụng máy ảo để qua lại:

Nhưng có vẻ như để làm điều tương tự như bên ngoài, mà nó chỉ bỏ qua các đầu vào.

Bây giờ tôi biết các đầu vào và đầu ra cho các WMQ đang làm việc, như tôi trước đây thiết lập một dòng chảy được sử dụng http để giao tiếp với bản thân và để cho nó biết khi nào một thông điệp đi qua.

Những gì tôi về cơ bản muốn điều này, nhưng sử dụng HTTP thay vì AJAX

My mới nhất, và có lẽ nỗ lực gần giống như vậy:

XML là:

<?xml version="1.0" encoding="UTF-8"?> 
<mule xmlns:vm="http://www.mulesoft.org/schema/mule/vm" xmlns:http="http://www.mulesoft.org/schema/mule/http" version="EE-3.6.0" xmlns="http://www.mulesoft.org/schema/mule/core" xmlns:ajax="http://www.mulesoft.org/schema/mule/ajax" xmlns:core="http://www.mulesoft.org/schema/mule/core" xmlns:doc="http://www.mulesoft.org/schema/mule/documentation" xmlns:ee="http://www.mulesoft.org/schema/mule/ee/core" xmlns:json="http://www.mulesoft.org/schema/mule/json" xmlns:spring="http://www.springframework.org/schema/beans" xmlns:stdio="http://www.mulesoft.org/schema/mule/stdio" xmlns:test="http://www.mulesoft.org/schema/mule/test" xmlns:tracking="http://www.mulesoft.org/schema/mule/ee/tracking" xmlns:wmq="http://www.mulesoft.org/schema/mule/ee/wmq" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.mulesoft.org/schema/mule/ajax http://www.mulesoft.org/schema/mule/ajax/current/mule-ajax.xsd 
http://www.mulesoft.org/schema/mule/ee/wmq http://www.mulesoft.org/schema/mule/ee/wmq/current/mule-wmq-ee.xsd 
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-current.xsd 
http://www.mulesoft.org/schema/mule/core http://www.mulesoft.org/schema/mule/core/current/mule.xsd 
http://www.mulesoft.org/schema/mule/ee/core http://www.mulesoft.org/schema/mule/ee/core/current/mule-ee.xsd 
http://www.mulesoft.org/schema/mule/stdio http://www.mulesoft.org/schema/mule/stdio/current/mule-stdio.xsd 
http://www.mulesoft.org/schema/mule/test http://www.mulesoft.org/schema/mule/test/current/mule-test.xsd 
http://www.mulesoft.org/schema/mule/json http://www.mulesoft.org/schema/mule/json/current/mule-json.xsd 
http://www.mulesoft.org/schema/mule/ee/tracking http://www.mulesoft.org/schema/mule/ee/tracking/current/mule-tracking-ee.xsd 
http://www.mulesoft.org/schema/mule/http http://www.mulesoft.org/schema/mule/http/current/mule-http.xsd 
http://www.mulesoft.org/schema/mule/vm http://www.mulesoft.org/schema/mule/vm/current/mule-vm.xsd"> 

    <wmq:connector channel="MAGENTO.SVRCONN" doc:name="WMQ Connector" hostName="[ip]" name="wmqConnector" port="1414" queueManager="MAGENTO" transportType="CLIENT_MQ_TCPIP" validateConnections="true" /> 
    <vm:connector name="VM" validateConnections="true" doc:name="VM"> 
     <vm:queue-profile maxOutstandingMessages="500"> 
      <default-persistent-queue-store/> 
     </vm:queue-profile> 
    </vm:connector> 
    <http:listener-config name="HTTP_Listener_Configuration" host="0.0.0.0" port="8081" doc:name="HTTP Listener Configuration"/> 
    <flow name="Input"> 
     <http:listener config-ref="HTTP_Listener_Configuration" path="/mq" doc:name="HTTP"/> 
     <set-payload value="#[message.inboundProperties.'http.query.params'.xml]" doc:name="Set Payload"/> 
     <logger message="Entering Request-Reply Payload: #[payload]" level="INFO" doc:name="Logger"/> 
     <request-reply doc:name="Request-Reply"> 
      <vm:outbound-endpoint exchange-pattern="one-way" path="mq" connector-ref="VM" doc:name="VM_TriggerSend" /> 
      <vm:inbound-endpoint exchange-pattern="request-response" path="mq-return" connector-ref="VM" doc:name="VM_Receive" /> 
     </request-reply> 
     <logger message="Request-Reply has ended. Payload: #[payload]" level="INFO" doc:name="Logger"/> 
    </flow> 
    <flow name="Send_Message"> 
     <vm:inbound-endpoint exchange-pattern="one-way" path="mq" connector-ref="VM" doc:name="VM_Send"/> 
     <logger message="(Preparing to Dispatch) Payload: #[payload]" level="INFO" doc:name="Logger"/> 
     <wmq:outbound-endpoint queue="PUT_QUEUE" connector-ref="wmqConnector" doc:name="WMQ"/> 
     <logger message="Message presumably being dispatched after this log" level="INFO" doc:name="Logger"/> 
    </flow> 
    <flow name="Receive_Message"> 
     <wmq:inbound-endpoint queue="GET_QUEUE" connector-ref="wmqConnector" doc:name="WMQ_Receive" /> 
     <logger message="Triggering Receive" level="INFO" doc:name="Logger"/> 
     <vm:outbound-endpoint exchange-pattern="request-response" path="mq-return" connector-ref="VM" doc:name="VM_TriggerReceive" /> 
    </flow> 
</mule> 

Mà hầu như hoạt động, nhưng nó treo vô thời hạn mà không gửi phản hồi lại cho máy chủ HTTP. Đặt vm: điểm đến trong luồng Yêu cầu-Trả lời thành một chiều sẽ giữ cho nó không bị treo, nhưng không gửi tải trọng mới được nhận, mà thay vào đó là tải trọng trước đó (như thể nó đang bị bỏ qua).

Bất kỳ trợ giúp nào đều sẽ được đánh giá cao!

Trả lời

2

Nếu tôi hiểu chính xác bạn chỉ đang cố gắng vạch trần một yêu cầu trên hàng đợi và một câu trả lời trên hàng đợi được biết đến như là một api REST.

Không cần hàng đợi VM ở đó và cả phần tử yêu cầu trả lời khi giao thông JMS đều có thể mô phỏng mẫu trao đổi phản hồi yêu cầu.

Hàng đợi JMS chỉ là một cách. Bạn phải thường xuyên trả lời trên một hàng đợi khác. Logic đằng sau kịch bản yêu cầu-phản hồi là một điểm đầu cuối bên ngoài có thuộc tính đi: MULE_REPLYTO.Thuộc tính này nên được đặt với tên của câu trả lời nổi tiếng của bạn để xếp hàng: GET_QUEUE (nếu không có tiêu đề như vậy được cung cấp một hàng đợi tạm thời sẽ được tạo ra).

Tiêu đề MULE_REPLY cho tiêu đề sẽ trở thành tiêu chuẩn JMSReplyTo khi nhận được thông báo tại dịch vụ. Dịch vụ phải tôn vinh tiêu đề này gửi trả lời trở lại hàng đợi đó. Nếu dịch vụ được thực hiện trên Mule, điều này sẽ xảy ra tự động, nếu không nó có thể không xảy ra. Bạn nên kiểm tra lại nó đang được vinh danh.

Nếu bạn muốn sử dụng phạm vi yêu cầu trả lời với các điểm cuối một chiều thay vì một điểm cuối yêu cầu-phản hồi, nó là tốt, nên làm việc giống nhau nhưng với nhiều mã hơn.

-1

Làm một Asynchronous nguồn dữ liệu đồng bộ thực sự có thể được khôn lanh. Nhưng tôi không thực sự thấy vấn đề với chiến lược trả lời yêu cầu của bạn.

Cố gắng sử dụng một yêu cầu-trả lời với WMQ endpoint trên cả hai mặt. Sau đó theo dõi các hàng đợi và thấy rằng tin nhắn và trả lời đến như họ cần. Bạn có sử dụng cùng một hàng đợi cho yêu cầu và trả lời không? Kịch bản đơn giản nhất là sử dụng các kịch bản khác nhau, có thể cho trường hợp sử dụng của bạn không?

+0

Họ là hàng đợi khác nhau. Vấn đề với wmq trong câu trả lời yêu cầu là gửi đến wmq không thực thi cho đến khi luồng hoàn thành theo tài liệu của mule – Navarr

Các vấn đề liên quan