【问题标题】:How to access postgreSQL database using Mule pattern?如何使用 Mule 模式访问 postgreSQL 数据库?
【发布时间】:2013-10-11 02:05:16
【问题描述】:

我可以记录一些消息,但是如何更改它以访问数据库并发送这些消息并存储在那里?

我知道数据库部分与模式断开连接,但尝试了一些东西,但到目前为止没有任何效果..

代码:

<scripting:transformer name="noopLoggingTransformer">
    <scripting:script engine="groovy">
        log.info "insert into inbound_messages (payload, timestamp, agent, ip_from, endpoint, soap_operation) values ('',now(), ${message.getInboundProperty('user-agent')}, ${message.getInboundProperty('MULE_REMOTE_CLIENT_ADDRESS')}, ${message.getInboundProperty('http.request')}, '');"
        message
    </scripting:script>
</scripting:transformer>

<pattern:web-service-proxy name="service" transformer-refs="noopLoggingTransformer" inboundAddress="${serverName}/services/Logradouros/LogradouroServico" outboundAddress="${targetServer}/servicos/v2/LogradouroServico.svc" wsdlFile="LogradouroServicos.wsdl">
</pattern:web-service-proxy>

<jdbc-ee:postgresql-data-source name="dbconection" user="${database.user}" password="${database.pass}" url="${database.url}" transactionIsolation="UNSPECIFIED" doc:name="PostgreSQL Data Source">
</jdbc-ee:postgresql-data-source>

<jdbc-ee:connector name="jdbcConnector" dataSource-ref="dbconection" validateConnections="false" transactionPerMessage="true" queryTimeout="10" pollingFrequency="10000" doc:name="JDBC"> 
    <jdbc-ee:query key="querymsg" value="insert into inbound_messages (payload, timestamp, agent, ip_from, endpoint, soap_operation) values ('', now(), '','','')"></jdbc-ee:query>  
</jdbc-ee:connector>

之后我尝试了不同的方法:

<flow name="logradouros-autenticacao" doc:name="logradouros-autenticacao"> 
    <servlet:inbound-endpoint path="${webservice.logradouros.in.autenticacao.path}" responseTimeout="10000" doc:name="HTTP"></servlet:inbound-endpoint>  
    <async doc:name="Async"> 
        <flow-ref name="log-request" doc:name="Flow Reference"></flow-ref>  
    </async>  
    <outbound-endpoint exchange-pattern="request-response" address="${webservice.logradouros.out.protocol}://${webservice.logradouros.out.host}/${webservice.logradouros.out.autenticacao.path}" doc:name="Generic"></outbound-endpoint>  
</flow>

<flow name="log-request" doc:name="log-request"> 
    <logger message="1-&gt; #[groovy:payload.getClass()]" level="INFO" doc:name="Logger"></logger>  
    <jdbc-ee:outbound-endpoint exchange-pattern="one-way" queryKey="insertMsg" responseTimeout="10000" queryTimeout="-1" connector-ref="jdbcConnector" doc:name="Persist raw message"></jdbc-ee:outbound-endpoint>  
    <logger message="#[header:INBOUND:Host] #[header:INBOUND:http.method] #[message.inboundProperties.entrySet().toString()] #[groovy:payload.toString()] #[groovy: return message.getInboundPropertyNames().toString()] #[groovy: return message.getInboundProperty('request.parameters').toString()]" level="INFO" category="mule.http.accesslog" doc:name="Logger"></logger>  
    <logger message="#[message.outboundProperties.entrySet().toString()]" level="INFO" category="mule.http.accesslog" doc:name="Logger"></logger>  
</flow>

它不是 100%,但它可以锻炼,通过模式的方法不起作用......

【问题讨论】:

    标签: postgresql jdbc mule


    【解决方案1】:

    在您的转换器中,使用 muleContext.client 将消息分派到另一个流使用的 VM 队列,这将负责在数据库中插入数据。

    所以在你的情况下,类似于以下的东西应该可以工作:

    <scripting:transformer name="noopLoggingTransformer">
        <scripting:script engine="groovy">
            muleContext.client.dispatch('vm://log-request.in', message)
            message
        </scripting:script>
    </scripting:transformer>
    
    <pattern:web-service-proxy name="service" transformer-refs="noopLoggingTransformer" inboundAddress="${serverName}/services/Logradouros/LogradouroServico" outboundAddress="${targetServer}/servicos/v2/LogradouroServico.svc" wsdlFile="LogradouroServicos.wsdl" />
    
    <flow name="log-request" doc:name="log-request"> 
        <vm:inbound-endpoint path="log-request.in" />
        <logger message="1-&gt; #[groovy:payload.getClass()]" level="INFO" doc:name="Logger" />
        <jdbc-ee:outbound-endpoint exchange-pattern="one-way" queryKey="insertMsg" responseTimeout="10000" queryTimeout="-1" connector-ref="jdbcConnector" doc:name="Persist raw message" />
        <!-- TODO use MEL, not these old style expressions -->
        <logger message="#[header:INBOUND:Host] #[header:INBOUND:http.method] #[message.inboundProperties.entrySet().toString()] #[groovy:payload.toString()] #[groovy: return message.getInboundPropertyNames().toString()] #[groovy: return message.getInboundProperty('request.parameters').toString()]" level="INFO" category="mule.http.accesslog" doc:name="Logger" />  
        <logger message="#[message.outboundProperties.entrySet().toString()]" level="INFO" category="mule.http.accesslog" doc:name="Logger" />
    </flow>
    

    【讨论】:

    • 好的,在网上搜索有关示例或文档的内容我没有找到,任何有关此问题的文档或示例?
    • 不确定是什么阻碍了您或您正在寻找什么示例?你试过什么吗?你读过mulesoft.org/docs/site/3.4.0/apidocs/index.html?org/mule/api/… 吗?
    • 我确实读过,但想清楚我将如何更改我的转换器或模式以通过 postgreSQL 记录消息......并且正在寻找更多关于这个问题的答案,通过互联网进行搜索无法使用 muleContext.client 或类似的东西找到某人或一些示例/文档...
    • Mule 客户端的使用在 Mule in Action,第二版的第 12 章中有详细介绍。但这是我们在这里讨论的一行 Groovy 代码,所以这应该不是问题。
    • 既然我有这本书,我会看看那一章,看看我能做什么
    猜你喜欢
    • 2016-04-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-13
    • 2022-01-23
    • 2022-01-25
    • 2019-07-13
    • 2012-11-22
    相关资源
    最近更新 更多