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