0

メッセージをログに記録することはできますが、それを変更してデータベースにアクセスし、それらのメッセージを送信してそこに保存するにはどうすればよいですか?

データベース部分がパターンから切り離されていることは知っていますが、何かを試してみましたが、これまでのところ何も機能していません..

コード:

<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%ではありませんが、うまくいく可能性があります。パターンによるアプローチは機能しませんでした...

4

1 に答える 1

1

トランスフォーマーで、muleContext.client別のフローによって消費される VM キューにメッセージをディスパッチするために使用します。これにより、DB へのデータの挿入が処理されます。

したがって、あなたの場合、次のようなものが機能するはずです。

<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>
于 2013-10-08T22:54:34.340 に答える