我正在开发一个安静的网络服务,其中网络服务的目的是根据请求发送电子邮件。
我们决定使用Mule来实现这一目标。我们在mule中定义了一个流,它接受请求(POST)然后将其写入队列。然后会有另一个流从这个队列中读取,然后使用sendmail或任何其他java邮件api发送消息。
我负责创建一个从队列中读取然后发送电子邮件的流程。下面是将消息写入队列的mule_config.xml流:
<!-- This is the persistent VM connector -->
<vm:connector name="mailQueueConnector" queueTimeout="1000">
<vm:queue-profile>
<file-queue-store />
</vm:queue-profile>
</vm:connector>
<flow name="MailService">
<https:inbound-endpoint address="https://localhost:71234/message/email"
method="POST"
exchange-pattern="request-response"
contentType="application/xml"/>
<vm:outbound-endpoint path="mailQueue" connector-ref="mailQueueConnector">
<message-property-filter pattern="http.status=200" />
<logger message="INTO mailQueue" level="INFO"/>
</vm:outbound-endpoint>
<response>
<message-property-filter pattern="http.status=200" />
<script:transformer>
<script:script engine="groovy">
<script:text>
import groovy.xml.*
def writer = new StringWriter()
def xml = new MarkupBuilder(writer)
xml.ApiMessage {
returnCode("200")
reason("Queued Succesfully!!!")
}
return writer.toString()
</script:text>
</script:script>
</script:transformer>
</response>
</flow>
从上面我可以看到,点击入站端点“https:// localhost:71234 / message / email”的POST电子邮件请求被写入队列“mailQueue”。但是对于我的任务,我如何阅读队列中的电子邮件并将其序列化为电子邮件对象,以便我可以在java中编码以发送该电子邮件?我假设我必须为此写一个新的流程。我对吗?请允许任何人在这里指出我正确的方向。
答案 0 :(得分:2)
使用以下命令创建新流程:
vm:inbound-endpoint
路径的mailQueue
。smtp:outbound-endpoint
,使用MEL表达式表示其不同的属性(to,subject ...)。编辑 - OP现在希望通过HTTP和内部可以从外部访问流。添加了一个复合源来执行此操作:
<flow name="emailer">
<composite-source>
<https:inbound-endpoint address="localhost:71234/message/sendEmail"
method="POST" exchange-pattern="request-response"
contentType="application/xml" />
<vm:inbound-endpoint path="mailQueue"
connector-ref="mailQueueConnector">
</composite-source>
<!-- Add transformers here if needed -->
<smtp:outbound-endpoint ... />
</flow>