我是MuleESB
的新手。我对流程知之甚少。我找不到Mule
的正确文档。我试图使用下面的代码从数据库中获取数据,但我无法获取数据。没有显示错误,所以我不知道该怎么做。我的流程是否正确?
这是我的流配置。
<?xml version="1.0" encoding="UTF-8"?>
<mule xmlns:jdbc-ee="http://www.mulesoft.org/schema/mule/ee/jdbc" xmlns:http="http://www.mulesoft.org/schema/mule/http" xmlns:json="http://www.mulesoft.org/schema/mule/json" xmlns:mulexml="http://www.mulesoft.org/schema/mule/xml" xmlns="http://www.mulesoft.org/schema/mule/core" xmlns:doc="http://www.mulesoft.org/schema/mule/documentation" xmlns:spring="http://www.springframework.org/schema/beans" version="EE-3.4.1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="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/xml http://www.mulesoft.org/schema/mule/xml/current/mule-xml.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/ee/jdbc http://www.mulesoft.org/schema/mule/ee/jdbc/current/mule-jdbc-ee.xsd
http://www.mulesoft.org/schema/mule/json http://www.mulesoft.org/schema/mule/json/current/mule-json.xsd">
<jdbc-ee:postgresql-data-source name="PostgreSQL_Data_Source" user="youtilitydba" password="Youtility11" url="jdbc:postgresql://localhost:5432/sample" transactionIsolation="UNSPECIFIED" doc:name="PostgreSQL Data Source"/>
<jdbc-ee:connector name="Database" dataSource-ref="PostgreSQL_Data_Source" validateConnections="true" queryTimeout="-1" pollingFrequency="0" doc:name="Database"/>
<flow name="selectfromdbFlow1" doc:name="selectfromdbFlow1">
<http:inbound-endpoint exchange-pattern="request-response" host="localhost" port="8081" path="selectdb" doc:name="HTTP"/>
<json:json-to-object-transformer returnClass="java.util.Map" doc:name="JSON to Object"/>
<jdbc-ee:outbound-endpoint exchange-pattern="one-way" queryKey="SELECT" queryTimeout="-1" connector-ref="Database" doc:name="Database">
<jdbc-ee:query key="SELECT" value="select firstname,lastname,id from users where id =#[message.payload.id]"/>
</jdbc-ee:outbound-endpoint>
<response>
<http:response-builder status="200" contentType="application/json" doc:name="HTTP Response Builder"/>
</response>
<set-payload value="#[payload]" doc:name="Set Payload"/>
<echo-component doc:name="Echo"/>
</flow>
</mule>
我正在发送curl客户端的请求,就像这样
curl -H "Content-Type: application/json" -d '{"id":"5"}' http://192.168.25.24:8081/selectdb
它没有提供和回复。
我期待下面的回复。
{"Body":{"Datalist":{"firstname":"ff","lastname":"ggg","id":"5"}},"Status":"200"}}
请帮助我实现这个目标。
即使是记录器语句也没有打印
<logger message="message of payload#[message.payload]" level="INFO" doc:name="Logger"/>
感谢任何帮助。
答案 0 :(得分:1)
您可以在CONVERT_TZ
之后更好地使用<json:json-to-object-transformer returnClass="java.lang.Object" doc:name="JSON to Object"/>
,并确保从请求和db后的有效负载中获取id值
现在,如果您从db获取数据并且能够在使用db后使用记录器打印它
http:inbound-endpoint
您可以通过以下方式明确设置对客户的回复: -
<logger message="message of payload #[message.payload]" level="INFO" doc:name="Logger"/>
并且您可以从流量中删除<http:response-builder status="200" contentType="application/json" doc:name="HTTP Response Builder">
<set-payload value="#[message.payload]" doc:name="Set Payload"/>
</http:response-builder>
代码,因为您使用上面的<response/>
设置了响应有效负载
答案 1 :(得分:0)
我无法完全回答您的问题,但可以告诉您几种简单的方法来检查您的muleMessage。 第一个也是最简单的方法是放置一个像这样的脚本转换器:
<script:transformer>
<script:script engine="groovy">
<script:text>
System.out.println(payload);
return payload;
</script:text>
</script:script>
</script:transformer>
namespace:xmlns:script =“http://www.mulesoft.org/schema/mule/scripting”
schemaLocation:http://www.mulesoft.org/schema/mule/scripting http://www.mulesoft.org/schema/mule/scripting/current/mule-scripting.xsd
第二个选项,更难的是创建自定义变换器。你需要创建一个java类,扩展AbstractMessageTransformer。然后调试您的项目,看看是什么消息 希望,这会有所帮助
答案 2 :(得分:0)
无法解决您所面临的完整问题。从帖子中我可以看到,几乎没有任何变化。
当您从Select Query
寻找数据时,请将exchange-pattern
上的JBDC:Outbound
更改为request-response
<jdbc-ee:outbound-endpoint exchange-pattern="request-response" queryKey="SELECT" queryTimeout="-1" connector-ref="Database" doc:name="Database">
此外,流程结束时不需要<set-payload>
。由于有效负载已在消息中可用,因此这是一个冗余语句。
在记录器中尝试使用#[payload]
,因为打印有效负载更简单(来自JBDC查询的响应)
关于文档,MuleSoft网站是查找有关mule的文档的最佳位置。他们有关于Mule的大部分内容的详细文档。
Mule User Guide and Documentation
希望这有帮助。