2017-10-24 1 views
1

Bakground: Ich möchte einen Batch-Job über eine JMS-Nachricht auslösen und Feedback an einen Client (s) über einen Websocket senden.int: outbound-websocket-adapter sendet einen MESSAGE-Rahmen. Ich erwartete einen SEND-Frame

Ausgabe: Der Server empfängt einen MESSAGE-Rahmen vom Client noch erwarte ich einen SEND-Rahmen. Als Ergebnis erhalten Abonnenten des Themas (/ topic/export-status) den JobExection-Status nicht.

Frage: Wie behebe ich das? Fehle ich etwas

Ich habe im folgenden Frühjahr Integration Fluss: jms msg -> Nachricht angetrieben dapter -> JSM auf Jobanforderung Transformator -> Job starten Gateway -> Outbound websocket

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:int="http://www.springframework.org/schema/integration" xmlns:jms="http://www.springframework.org/schema/jms" xmlns:int-jms="http://www.springframework.org/schema/integration/jms" 
    xmlns:batch="http://www.springframework.org/schema/batch" xmlns:batch-int="http://www.springframework.org/schema/batch-integration" xmlns:int-websocket="http://www.springframework.org/schema/integration/websocket" xmlns:websocket="http://www.springframework.org/schema/websocket" 
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd 
     http://www.springframework.org/schema/websocket http://www.springframework.org/schema/websocket/spring-websocket.xsd 
     http://www.springframework.org/schema/jms http://www.springframework.org/schema/jms/spring-jms.xsd 
     http://www.springframework.org/schema/integration/websocket http://www.springframework.org/schema/integration/websocket/spring-integration-websocket.xsd 
     http://www.springframework.org/schema/integration/jms http://www.springframework.org/schema/integration/jms/spring-integration-jms.xsd 
     http://www.springframework.org/schema/batch-integration http://www.springframework.org/schema/batch-integration/spring-batch-integration.xsd 
     http://www.springframework.org/schema/integration http://www.springframework.org/schema/integration/spring-integration.xsd"> 

    <int:channel id="jmsInChannel"></int:channel> 
    <int:channel id="jmsOutChannel"></int:channel> 
    <int:channel id="fileExportJobRequests"></int:channel> 
    <int:channel id="fileExportJobChannel"></int:channel> 
    <int:channel id="errorChannel"></int:channel> 

    <int:publish-subscribe-channel id="wsStatusChannel" /> 

    <int-jms:message-driven-channel-adapter id="jmsIn" destination-name="inQueue" channel="jmsInChannel" error-channel="errorChannel" /> 


    <int:router input-channel="jmsInChannel" expression="payload.job"> 
    <int:mapping value="export" channel="fileExportJobChannel" /> 
    </int:router> 

    <int:chain input-channel="fileExportJobChannel" output-channel="fileExportJobRequests"> 
    <int:header-enricher> 
     <int:reply-channel ref="nullChannel" /> 
    </int:header-enricher> 
    <int:transformer id="prepareExportJobLaunchRequest"> 
     <bean class="com.bodastage.jobs.fileexport.JmsMessageToExportJobRequest"> 
     <property name="job" ref="fileExportJob" /> 
     </bean> 
    </int:transformer> 
    </int:chain> 

    <batch-int:job-launching-gateway request-channel="fileExportJobRequests" reply-channel="jmsOutChannel" /> 

    <int:object-to-string-transformer input-channel="jmsOutChannel" output-channel="wsStatusChannel" /> 

    <bean id="webSocketClient" class="org.springframework.web.socket.client.standard.StandardWebSocketClient" /> 

    <bean id="stompSubProtocolHandler" class="org.springframework.web.socket.messaging.StompSubProtocolHandler" /> 

    <int-websocket:client-container id="clientWebSocketContainer" client="websocketStompClient" uri="http://localhost:8080/websocket" auto-startup="true" /> 


    <int:chain input-channel="wsStatusChannel"> 
    <int:header-enricher default-overwrite="true"> 
     <int:header name="#{T(org.springframework.messaging.simp.SimpMessageHeaderAccessor).DESTINATION_HEADER}" value="/topic/export-status" /> 

    </int:header-enricher> 

    <int-websocket:outbound-channel-adapter container="clientWebSocketContainer" id="outboundWeSocketAdapter" default-protocol-handler="stompSubProtocolHandler"> 
    </int-websocket:outbound-channel-adapter> 
    </int:chain> 

    <int:logging-channel-adapter id="logger" channel="wsStatusChannel" level="INFO" log-full-message="true" /> 
</beans> 

Client-Protokoll:

Consumer [ActiveMQMessageConsumer { value=ID:LAPTOP-I5BST4S0-52358-1508768644545-1:1:1:1, started=true }] of session [ActiveMQSession {id=ID:LAPTOP-I5BST4S0-52358-1508768644545-1:1:1,started=true} [email protected]] did not receive a message 
2017-10-23 17:35:03.176 DEBUG 14984 --- [sIn.container-1] o.s.j.l.DefaultMessageListenerContainer : Received message of type [class org.apache.activemq.command.ActiveMQMapMessage] from consumer [ActiveMQMessageConsumer { value=ID:LAPTOP-I5BST4S0-52358-1508768644545-1:1:1:1, started=true }] of session [ActiveMQSession {id=ID:LAPTOP-I5BST4S0-52358-1508768644545-1:1:1,started=true} [email protected]] 
2017-10-23 17:35:03.177 DEBUG 14984 --- [sIn.container-1] .i.j.ChannelPublishingJmsMessageListener : converted JMS Message [ActiveMQMapMessage {commandId = 5, responseRequired = true, messageId = ID:LAPTOP-I5BST4S0-61078-1508580196140-1:55:1:1:1, originalDestination = null, originalTransactionId = null, producerId = ID:LAPTOP-I5BST4S0-61078-1508580196140-1:55:1:1, destination = queue://inQueue, transactionId = null, expiration = 0, timestamp = 1508769303167, arrival = 0, brokerInTime = 1508769303167, brokerOutTime = 1508769303171, correlationId = null, replyTo = null, persistent = true, type = null, priority = 4, groupID = null, groupSequence = 0, targetConsumerId = null, compressed = false, userID = null, content = [email protected], marshalledProperties = null, dataStructure = null, redeliveryCounter = 0, size = 0, properties = null, readOnlyProperties = true, readOnlyBody = true, droppable = false, jmsXGroupFirstForConsumer = false} ActiveMQMapMessage{ theTable = {name=Missing externals, format=csv, pk=1, job=export, file_name=missing_externals_20171023053503.csv, query=SELECT * FROM networkaudit.rule_missing_externals} }] to integration Message payload [{file_name=missing_externals_20171023053503.csv, query=SELECT * FROM networkaudit.rule_missing_externals, name=Missing externals, format=csv, pk=1, job=export}] 
2017-10-23 17:35:03.178 DEBUG 14984 --- [sIn.container-1] o.s.integration.channel.DirectChannel : preSend on channel 'jmsInChannel', message: GenericMessage [payload={file_name=missing_externals_20171023053503.csv, query=SELECT * FROM networkaudit.rule_missing_externals, name=Missing externals, format=csv, pk=1, job=export}, headers={jms_redelivered=false, jms_destination=queue://inQueue, id=eb77658f-c22d-335f-14a2-23facb7aab13, priority=4, jms_timestamp=1508769303167, jms_messageId=ID:LAPTOP-I5BST4S0-61078-1508580196140-1:55:1:1:1, timestamp=1508769303177}] 
2017-10-23 17:35:03.178 DEBUG 14984 --- [sIn.container-1] o.s.i.router.ExpressionEvaluatingRouter : org.springframework.integration.config.RouterFactoryBean#0 received message: GenericMessage [payload={file_name=missing_externals_20171023053503.csv, query=SELECT * FROM networkaudit.rule_missing_externals, name=Missing externals, format=csv, pk=1, job=export}, headers={jms_redelivered=false, jms_destination=queue://inQueue, id=eb77658f-c22d-335f-14a2-23facb7aab13, priority=4, jms_timestamp=1508769303167, jms_messageId=ID:LAPTOP-I5BST4S0-61078-1508580196140-1:55:1:1:1, timestamp=1508769303177}] 
2017-10-23 17:35:03.178 DEBUG 14984 --- [sIn.container-1] o.s.integration.channel.DirectChannel : preSend on channel 'fileExportJobChannel', message: GenericMessage [payload={file_name=missing_externals_20171023053503.csv, query=SELECT * FROM networkaudit.rule_missing_externals, name=Missing externals, format=csv, pk=1, job=export}, headers={jms_redelivered=false, jms_destination=queue://inQueue, id=eb77658f-c22d-335f-14a2-23facb7aab13, priority=4, jms_timestamp=1508769303167, jms_messageId=ID:LAPTOP-I5BST4S0-61078-1508580196140-1:55:1:1:1, timestamp=1508769303177}] 
2017-10-23 17:35:03.178 DEBUG 14984 --- [sIn.container-1] o.s.i.handler.MessageHandlerChain  : org.springframework.integration.handler.MessageHandlerChain#0 received message: GenericMessage [payload={file_name=missing_externals_20171023053503.csv, query=SELECT * FROM networkaudit.rule_missing_externals, name=Missing externals, format=csv, pk=1, job=export}, headers={jms_redelivered=false, jms_destination=queue://inQueue, id=eb77658f-c22d-335f-14a2-23facb7aab13, priority=4, jms_timestamp=1508769303167, jms_messageId=ID:LAPTOP-I5BST4S0-61078-1508580196140-1:55:1:1:1, timestamp=1508769303177}] 
2017-10-23 17:35:03.179 DEBUG 14984 --- [sIn.container-1] o.s.i.t.MessageTransformingHandler  : org.springframework.integration.handler.MessageHandlerChain#0$child#0.handler received message: GenericMessage [payload={file_name=missing_externals_20171023053503.csv, query=SELECT * FROM networkaudit.rule_missing_externals, name=Missing externals, format=csv, pk=1, job=export}, headers={jms_redelivered=false, jms_destination=queue://inQueue, id=eb77658f-c22d-335f-14a2-23facb7aab13, priority=4, jms_timestamp=1508769303167, jms_messageId=ID:LAPTOP-I5BST4S0-61078-1508580196140-1:55:1:1:1, timestamp=1508769303177}] 
2017-10-23 17:35:03.179 DEBUG 14984 --- [sIn.container-1] o.s.i.t.MessageTransformingHandler  : org.springframework.integration.handler.MessageHandlerChain#0$child.prepareExportJobLaunchRequest.handler received message: GenericMessage [payload={file_name=missing_externals_20171023053503.csv, query=SELECT * FROM networkaudit.rule_missing_externals, name=Missing externals, format=csv, pk=1, job=export}, headers={replyChannel=nullChannel, jms_redelivered=false, jms_destination=queue://inQueue, id=9e4ae8c9-2148-6aea-cb94-d38c573a8622, priority=4, jms_timestamp=1508769303167, jms_messageId=ID:LAPTOP-I5BST4S0-61078-1508580196140-1:55:1:1:1, timestamp=1508769303179}] 
2017-10-23 17:35:03.184 DEBUG 14984 --- [sIn.container-1] o.s.integration.channel.DirectChannel : preSend on channel 'fileExportJobRequests', message: GenericMessage [payload=JobLaunchRequest: fileExportJob, parameters={query=SELECT * FROM networkaudit.rule_missing_externals, format=csv, fileName=missing_externals_20171023053503.csv}, headers={replyChannel=nullChannel, jms_redelivered=false, jms_destination=queue://inQueue, id=4f07fb9a-ae56-942f-d9c8-f9a68a6fb57f, priority=4, jms_timestamp=1508769303167, jms_messageId=ID:LAPTOP-I5BST4S0-61078-1508580196140-1:55:1:1:1, timestamp=1508769303184}] 
2017-10-23 17:35:03.217 INFO 14984 --- [sIn.container-1] o.s.b.c.l.support.SimpleJobLauncher  : Job: [SimpleJob: [name=fileExportJob]] launched with the following parameters: [{query=SELECT * FROM networkaudit.rule_missing_externals, format=csv, fileName=missing_externals_20171023053503.csv}] 
2017-10-23 17:35:03.260 INFO 14984 --- [sIn.container-1] o.s.batch.core.job.SimpleStepHandler  : Executing step: [step] 
2017-10-23 17:35:03.365 INFO 14984 --- [sIn.container-1] o.s.b.c.l.support.SimpleJobLauncher  : Job: [SimpleJob: [name=fileExportJob]] completed with the following parameters: [{query=SELECT * FROM networkaudit.rule_missing_externals, format=csv, fileName=missing_externals_20171023053503.csv}] and the following status: [COMPLETED] 
2017-10-23 17:35:03.366 DEBUG 14984 --- [sIn.container-1] o.s.integration.channel.DirectChannel : preSend on channel 'jmsOutChannel', message: GenericMessage [payload=JobExecution: id=393, version=2, startTime=Mon Oct 23 17:35:03 EAT 2017, endTime=Mon Oct 23 17:35:03 EAT 2017, lastUpdated=Mon Oct 23 17:35:03 EAT 2017, status=COMPLETED, exitStatus=exitCode=COMPLETED;exitDescription=, job=[JobInstance: id=370, version=0, Job=[fileExportJob]], jobParameters=[{query=SELECT * FROM networkaudit.rule_missing_externals, format=csv, fileName=missing_externals_20171023053503.csv}], headers={replyChannel=nullChannel, jms_redelivered=false, jms_destination=queue://inQueue, id=d60873a9-ca67-a0c9-4b72-0296c538a5f8, priority=4, jms_timestamp=1508769303167, jms_messageId=ID:LAPTOP-I5BST4S0-61078-1508580196140-1:55:1:1:1, timestamp=1508769303366}] 
2017-10-23 17:35:03.367 DEBUG 14984 --- [sIn.container-1] o.s.i.t.MessageTransformingHandler  : org.springframework.integration.transformer.MessageTransformingHandler#0 received message: GenericMessage [payload=JobExecution: id=393, version=2, startTime=Mon Oct 23 17:35:03 EAT 2017, endTime=Mon Oct 23 17:35:03 EAT 2017, lastUpdated=Mon Oct 23 17:35:03 EAT 2017, status=COMPLETED, exitStatus=exitCode=COMPLETED;exitDescription=, job=[JobInstance: id=370, version=0, Job=[fileExportJob]], jobParameters=[{query=SELECT * FROM networkaudit.rule_missing_externals, format=csv, fileName=missing_externals_20171023053503.csv}], headers={replyChannel=nullChannel, jms_redelivered=false, jms_destination=queue://inQueue, id=d60873a9-ca67-a0c9-4b72-0296c538a5f8, priority=4, jms_timestamp=1508769303167, jms_messageId=ID:LAPTOP-I5BST4S0-61078-1508580196140-1:55:1:1:1, timestamp=1508769303366}] 
2017-10-23 17:35:03.368 DEBUG 14984 --- [sIn.container-1] o.s.i.channel.PublishSubscribeChannel : preSend on channel 'wsStatusChannel', message: GenericMessage [payload=JobExecution: id=393, version=2, startTime=Mon Oct 23 17:35:03 EAT 2017, endTime=Mon Oct 23 17:35:03 EAT 2017, lastUpdated=Mon Oct 23 17:35:03 EAT 2017, status=COMPLETED, exitStatus=exitCode=COMPLETED;exitDescription=, job=[JobInstance: id=370, version=0, Job=[fileExportJob]], jobParameters=[{query=SELECT * FROM networkaudit.rule_missing_externals, format=csv, fileName=missing_externals_20171023053503.csv}], headers={replyChannel=nullChannel, jms_redelivered=false, jms_destination=queue://inQueue, id=ebbc1358-f43f-329d-da30-14618eb47552, priority=4, jms_timestamp=1508769303167, jms_messageId=ID:LAPTOP-I5BST4S0-61078-1508580196140-1:55:1:1:1, timestamp=1508769303367}] 
2017-10-23 17:35:03.368 DEBUG 14984 --- [sIn.container-1] o.s.i.handler.MessageHandlerChain  : org.springframework.integration.handler.MessageHandlerChain#1 received message: GenericMessage [payload=JobExecution: id=393, version=2, startTime=Mon Oct 23 17:35:03 EAT 2017, endTime=Mon Oct 23 17:35:03 EAT 2017, lastUpdated=Mon Oct 23 17:35:03 EAT 2017, status=COMPLETED, exitStatus=exitCode=COMPLETED;exitDescription=, job=[JobInstance: id=370, version=0, Job=[fileExportJob]], jobParameters=[{query=SELECT * FROM networkaudit.rule_missing_externals, format=csv, fileName=missing_externals_20171023053503.csv}], headers={replyChannel=nullChannel, jms_redelivered=false, jms_destination=queue://inQueue, id=ebbc1358-f43f-329d-da30-14618eb47552, priority=4, jms_timestamp=1508769303167, jms_messageId=ID:LAPTOP-I5BST4S0-61078-1508580196140-1:55:1:1:1, timestamp=1508769303367}] 
2017-10-23 17:35:03.368 DEBUG 14984 --- [sIn.container-1] o.s.i.t.MessageTransformingHandler  : org.springframework.integration.handler.MessageHandlerChain#1$child#0.handler received message: GenericMessage [payload=JobExecution: id=393, version=2, startTime=Mon Oct 23 17:35:03 EAT 2017, endTime=Mon Oct 23 17:35:03 EAT 2017, lastUpdated=Mon Oct 23 17:35:03 EAT 2017, status=COMPLETED, exitStatus=exitCode=COMPLETED;exitDescription=, job=[JobInstance: id=370, version=0, Job=[fileExportJob]], jobParameters=[{query=SELECT * FROM networkaudit.rule_missing_externals, format=csv, fileName=missing_externals_20171023053503.csv}], headers={replyChannel=nullChannel, jms_redelivered=false, jms_destination=queue://inQueue, id=ebbc1358-f43f-329d-da30-14618eb47552, priority=4, jms_timestamp=1508769303167, jms_messageId=ID:LAPTOP-I5BST4S0-61078-1508580196140-1:55:1:1:1, timestamp=1508769303367}] 
2017-10-23 17:35:03.368 DEBUG 14984 --- [sIn.container-1] .s.i.w.o.WebSocketOutboundMessageHandler : org.springframework.integration.handler.MessageHandlerChain#1$child.outboundWeSocketAdapter.handler received message: GenericMessage [payload=JobExecution: id=393, version=2, startTime=Mon Oct 23 17:35:03 EAT 2017, endTime=Mon Oct 23 17:35:03 EAT 2017, lastUpdated=Mon Oct 23 17:35:03 EAT 2017, status=COMPLETED, exitStatus=exitCode=COMPLETED;exitDescription=, job=[JobInstance: id=370, version=0, Job=[fileExportJob]], jobParameters=[{query=SELECT * FROM networkaudit.rule_missing_externals, format=csv, fileName=missing_externals_20171023053503.csv}], headers={replyChannel=nullChannel, jms_redelivered=false, jms_destination=queue://inQueue, id=c54b632b-a412-fb05-293a-5509811817ba, priority=4, jms_timestamp=1508769303167, jms_messageId=ID:LAPTOP-I5BST4S0-61078-1508580196140-1:55:1:1:1, simpDestination=/topic/export-status, timestamp=1508769303368}] 
2017-10-23 17:35:03.369 WARN 14984 --- [sIn.container-1] o.s.w.s.m.StompSubProtocolHandler  : No STOMP "subscription" header in GenericMessage [payload=byte[410], headers={replyChannel=nullChannel, simpMessageType=MESSAGE, jms_redelivered=false, jms_destination=queue://inQueue, priority=4, jms_timestamp=1508769303167, contentType=text/plain;charset=UTF-8, jms_messageId=ID:LAPTOP-I5BST4S0-61078-1508580196140-1:55:1:1:1, simpDestination=/topic/export-status}] 
2017-10-23 17:35:03.369 TRACE 14984 --- [sIn.container-1] o.s.w.s.s.c.WebSocketClientSockJsSession : Sending message TextMessage payload=[["MESSAGE\..], byteCount=543, last=true] in WebSocketClientSockJsSession[id='59aa39c1ac8340abbf0e1289f9ec2919, url=http://localhost:8080/websocket] 
2017-10-23 17:35:03.369 TRACE 14984 --- [sIn.container-1] o.s.w.s.adapter.NativeWebSocketSession : Sending TextMessage payload=[["MESSAGE\..], byteCount=543, last=true], JettyWebSocketSession[id=a3fcd9f, uri=ws://localhost:8080/websocket/107/59aa39c1ac8340abbf0e1289f9ec2919/websocket] 
2017-10-23 17:35:03.370 DEBUG 14984 --- [sIn.container-1] o.s.integration.handler.LoggingHandler : org.springframework.integration.handler.LoggingHandler#0 received message: GenericMessage [payload=JobExecution: id=393, version=2, startTime=Mon Oct 23 17:35:03 EAT 2017, endTime=Mon Oct 23 17:35:03 EAT 2017, lastUpdated=Mon Oct 23 17:35:03 EAT 2017, status=COMPLETED, exitStatus=exitCode=COMPLETED;exitDescription=, job=[JobInstance: id=370, version=0, Job=[fileExportJob]], jobParameters=[{query=SELECT * FROM networkaudit.rule_missing_externals, format=csv, fileName=missing_externals_20171023053503.csv}], headers={replyChannel=nullChannel, jms_redelivered=false, jms_destination=queue://inQueue, id=ebbc1358-f43f-329d-da30-14618eb47552, priority=4, jms_timestamp=1508769303167, jms_messageId=ID:LAPTOP-I5BST4S0-61078-1508580196140-1:55:1:1:1, timestamp=1508769303367}] 
2017-10-23 17:35:03.371 INFO 14984 --- [sIn.container-1] o.s.integration.handler.LoggingHandler : GenericMessage [payload=JobExecution: id=393, version=2, startTime=Mon Oct 23 17:35:03 EAT 2017, endTime=Mon Oct 23 17:35:03 EAT 2017, lastUpdated=Mon Oct 23 17:35:03 EAT 2017, status=COMPLETED, exitStatus=exitCode=COMPLETED;exitDescription=, job=[JobInstance: id=370, version=0, Job=[fileExportJob]], jobParameters=[{query=SELECT * FROM networkaudit.rule_missing_externals, format=csv, fileName=missing_externals_20171023053503.csv}], headers={replyChannel=nullChannel, jms_redelivered=false, jms_destination=queue://inQueue, id=ebbc1358-f43f-329d-da30-14618eb47552, priority=4, jms_timestamp=1508769303167, jms_messageId=ID:LAPTOP-I5BST4S0-61078-1508580196140-1:55:1:1:1, timestamp=1508769303367}] 
2017-10-23 17:35:03.371 DEBUG 14984 --- [sIn.container-1] o.s.i.channel.PublishSubscribeChannel : postSend (sent=true) on channel 'wsStatusChannel', message: GenericMessage [payload=JobExecution: id=393, version=2, startTime=Mon Oct 23 17:35:03 EAT 2017, endTime=Mon Oct 23 17:35:03 EAT 2017, lastUpdated=Mon Oct 23 17:35:03 EAT 2017, status=COMPLETED, exitStatus=exitCode=COMPLETED;exitDescription=, job=[JobInstance: id=370, version=0, Job=[fileExportJob]], jobParameters=[{query=SELECT * FROM networkaudit.rule_missing_externals, format=csv, fileName=missing_externals_20171023053503.csv}], headers={replyChannel=nullChannel, jms_redelivered=false, jms_destination=queue://inQueue, id=ebbc1358-f43f-329d-da30-14618eb47552, priority=4, jms_timestamp=1508769303167, jms_messageId=ID:LAPTOP-I5BST4S0-61078-1508580196140-1:55:1:1:1, timestamp=1508769303367}] 
2017-10-23 17:35:03.371 DEBUG 14984 --- [sIn.container-1] o.s.integration.channel.DirectChannel : postSend (sent=true) on channel 'jmsOutChannel', message: GenericMessage [payload=JobExecution: id=393, version=2, startTime=Mon Oct 23 17:35:03 EAT 2017, endTime=Mon Oct 23 17:35:03 EAT 2017, lastUpdated=Mon Oct 23 17:35:03 EAT 2017, status=COMPLETED, exitStatus=exitCode=COMPLETED;exitDescription=, job=[JobInstance: id=370, version=0, Job=[fileExportJob]], jobParameters=[{query=SELECT * FROM networkaudit.rule_missing_externals, format=csv, fileName=missing_externals_20171023053503.csv}], headers={replyChannel=nullChannel, jms_redelivered=false, jms_destination=queue://inQueue, id=d60873a9-ca67-a0c9-4b72-0296c538a5f8, priority=4, jms_timestamp=1508769303167, jms_messageId=ID:LAPTOP-I5BST4S0-61078-1508580196140-1:55:1:1:1, timestamp=1508769303366}] 
2017-10-23 17:35:03.372 DEBUG 14984 --- [sIn.container-1] o.s.integration.channel.DirectChannel : postSend (sent=true) on channel 'fileExportJobRequests', message: GenericMessage [payload=JobLaunchRequest: fileExportJob, parameters={query=SELECT * FROM networkaudit.rule_missing_externals, format=csv, fileName=missing_externals_20171023053503.csv}, headers={replyChannel=nullChannel, jms_redelivered=false, jms_destination=queue://inQueue, id=4f07fb9a-ae56-942f-d9c8-f9a68a6fb57f, priority=4, jms_timestamp=1508769303167, jms_messageId=ID:LAPTOP-I5BST4S0-61078-1508580196140-1:55:1:1:1, timestamp=1508769303184}] 
2017-10-23 17:35:03.372 DEBUG 14984 --- [sIn.container-1] o.s.integration.channel.DirectChannel : postSend (sent=true) on channel 'fileExportJobChannel', message: GenericMessage [payload={file_name=missing_externals_20171023053503.csv, query=SELECT * FROM networkaudit.rule_missing_externals, name=Missing externals, format=csv, pk=1, job=export}, headers={jms_redelivered=false, jms_destination=queue://inQueue, id=eb77658f-c22d-335f-14a2-23facb7aab13, priority=4, jms_timestamp=1508769303167, jms_messageId=ID:LAPTOP-I5BST4S0-61078-1508580196140-1:55:1:1:1, timestamp=1508769303177}] 
2017-10-23 17:35:03.372 DEBUG 14984 --- [sIn.container-1] o.s.integration.channel.DirectChannel : postSend (sent=true) on channel 'jmsInChannel', message: GenericMessage [payload={file_name=missing_externals_20171023053503.csv, query=SELECT * FROM networkaudit.rule_missing_externals, name=Missing externals, format=csv, pk=1, job=export}, headers={jms_redelivered=false, jms_destination=queue://inQueue, id=eb77658f-c22d-335f-14a2-23facb7aab13, priority=4, jms_timestamp=1508769303167, jms_messageId=ID:LAPTOP-I5BST4S0-61078-1508580196140-1:55:1:1:1, timestamp=1508769303177}] 
2017-10-23 17:35:04.379 TRACE 14984 --- [sIn.container-1] o.s.j.l.DefaultMessageListenerContainer : Consumer [ActiveMQMessageConsumer { value=ID:LAPTOP-I5BST4S0-52358-1508768644545-1:1:1:1, started=true }] of session [ActiveMQSession {id=ID:LAPTOP-I5BST4S0-52358-1508768644545-1:1:1,started=true} [email protected]] did not receive a message 
2017-10-23 17:35:05.379 TRACE 14984 --- [sIn.container-1] o.s.j.l.DefaultMessageListenerContainer : Consumer [ActiveMQMessageConsumer { value=ID:LAPTOP-I5BST4S0-52358-1508768644545-1:1:1:1, started=true }] of session [ActiveMQSession {id=ID:LAPTOP-I5BST4S0-52358-1508768644545-1:1:1,started=true} [email protected]] did not receive a message 
2017-10-23 17:35:06.380 TRACE 14984 --- [sIn.container-1] 
o.s.j.l.DefaultMessageListenerContainer : Consumer [ActiveMQMessageConsumer 

Server-Protokoll:

2017-10-24 15:36:33.380 TRACE 22164 --- [nio-8080-exec-7] s.w.s.h.LoggingWebSocketHandlerDecorator : Handling TextMessage payload=[MESSAGE 
de..], byteCount=528, last=true] in WebSocketServerSockJsSession[id=9468834bc830423ba2fe048b041e3186] 
2017-10-24 15:36:33.381 TRACE 22164 --- [nio-8080-exec-7] o.s.w.s.m.StompSubProtocolHandler  : From client: MESSAGE {destination=[/topic/export-status], content-type=[text/plain;charset=UTF-8], message-id=[null-3], content-length=[410]} session=9468834bc830423ba2fe048b041e3186 text/plain;charset=UTF-8 payload=JobExecution: id=397, version=2, startTime=Tue Oct 24 15:36:33 EAT 2017, endTime...(truncated) 
2017-10-24 15:36:37.177 DEBUG 22164 --- [nio-8080-exec-8] o.s.b.w.f.OrderedRequestContextFilter : Cleared thread-bound request context: [email protected] 
2017-10-24 15:36:46.755 TRACE 22164 --- [MessageBroker-7] s.w.s.s.t.s.WebSocketServerSockJsSession : Preparing to write SockJsFrame content='h' 
2017-10-24 15:36:46.755 TRACE 22164 --- [MessageBroker-7] s.w.s.s.t.s.WebSocketServerSockJsSession : Writing SockJsFrame content='h' 
2017-10-24 15:36:46.755 TRACE 22164 --- [MessageBroker-7] o.s.w.s.adapter.NativeWebSocketSession : Sending TextMessage payload=[h], byteCount=1, last=true], StandardWebSocketSession[id=0, uri=/websocket/125/9468834bc830423ba2fe048b041e3186/websocket] 
2017-10-24 15:36:46.755 TRACE 22164 --- [MessageBroker-7] s.w.s.s.t.s.WebSocketServerSockJsSession : Cancelling heartbeat in session 9468834bc830423ba2fe048b041e3186 
2017-10-24 15:36:46.755 TRACE 22164 --- [MessageBroker-7] s.w.s.s.t.s.WebSocketServerSockJsSession : Scheduled heartbeat in session 9468834bc830423ba2fe048b041e3186 

UPDATE: ein Abfangjäger Hinzufügen:

public class WebSocketConfiguration implements WebSocketMessageBrokerConfigurer 
... 
    @Override 
    public void configureClientInboundChannel(ChannelRegistration registration) { 
     registration.taskExecutor().corePoolSize(Runtime.getRuntime().availableProcessors()*4); 

     registration.setInterceptors(new ChannelInterceptorAdapter() { 
      @Override 
      public Message<?> preSend(Message<?> message, MessageChannel channel) { 
       if (StompCommand.MESSAGE.equals(message.getHeaders().get("stompCommand"))) { 
        return MessageBuilder.fromMessage(message) 
          .setHeader("stompCommand", StompCommand.SEND) 
          .build(); 
       } 
       else { 
        return message; 
       } 
      } 
     }); 

    } 
... 

Server-Protokoll nach dem Kanal Abfangjäger Zugabe:

org.springframework.messaging.MessageDeliveryException: Failed to handle GenericMessage [payload=byte[410], headers={simpMessageType=MESSAGE, stompCommand=SEND, id=a9089aac-6c81-1672-cb84-b9a37fdafae9, timestamp=1509003161562}] to org.springf[email protected]702abfd5 in StompBrokerRelay[0.0.0.0:61613]; nested exception is java.lang.IllegalStateException: No header accessor (not using the SimpMessagingTemplate?): GenericMessage [payload=byte[410], headers={simpMessageType=MESSAGE, stompCommand=SEND, id=a9089aac-6c81-1672-cb84-b9a37fdafae9, timestamp=1509003161562}], failedMessage=GenericMessage [payload=byte[410], headers={simpMessageType=MESSAGE, stompCommand=SEND, id=a9089aac-6c81-1672-cb84-b9a37fdafae9, timestamp=1509003161562}] 
    at org.springframework.messaging.support.ExecutorSubscribableChannel$SendTask.run(ExecutorSubscribableChannel.java:144) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) 
    at java.lang.Thread.run(Unknown Source) 
Caused by: java.lang.IllegalStateException: No header accessor (not using the SimpMessagingTemplate?): GenericMessage [payload=byte[410], headers={simpMessageType=MESSAGE, stompCommand=SEND, id=a9089aac-6c81-1672-cb84-b9a37fdafae9, timestamp=1509003161562}] 
    at org.springframework.messaging.simp.stomp.StompBrokerRelayMessageHandler.handleMessageInternal(StompBrokerRelayMessageHandler.java:458) 
    at org.springframework.messaging.simp.broker.AbstractBrokerMessageHandler.handleMessage(AbstractBrokerMessageHandler.java:238) 
    at org.springframework.messaging.support.ExecutorSubscribableChannel$SendTask.run(ExecutorSubscribableChannel.java:135) 
... 3 more 
2017-10-26 10:32:41.654 DEBUG 27356 --- [io-8080-exec-10] s.w.s.h.LoggingWebSocketHandlerDecorator : WebSocketServerSockJsSession[id=e12efba449c2414eba4c3396888d163a] closed with CloseStatus[code=4500, reason=null] 

Antwort

0

Ich nehme an, Sie StompBrokerRelayMessageHandler auf der Server-Seite verwenden, und das ist ein Teil von STOMP-Protokoll zu senden genau SEND Frame von dort, um richtig vom Client zu Relais.

Leider ist die StompSubProtocolHandler nur für die Server-Seite entworfen und es hat diese Logik:

else if (stompAccessor.getCommand() == null || StompCommand.SEND.equals(stompAccessor.getCommand())) { 
    stompAccessor.updateStompCommandAsServerMessage(); 
} 

ich jetzt denke, was wir als eine outof der Box-Lösung tun könnte, aber mittlerweile würde ich Ihnen vorschlagen a ChannelInterceptor für die:

@Override 
public void configureClientInboundChannel(ChannelRegistration registration) { 
     registration.interceptors(new ChannelInterceptorAdapter() { 

      @Override 
      public Message<?> preSend(Message<?> message, MessageChannel channel) { 
       if (StompCommand.MESSAGE.equals(message.getHeaders().get("stompCommand"))) { 
        StompHeaderAccessor headers = StompHeaderAccessor.wrap(message); 
        headers.setLeaveMutable(true); 
        headers.removeHeader("stompCommand"); 
        headers.updateStompCommandAsClientMessage(); 
        return MessageBuilder.createMessage(message.getPayload(), headers.getMessageHeaders()); 
       } 
       else { 
        return message; 
       } 
      } 

     }); 
    } 

Dies ist eine Überschreibung der AbstractWebSocketMessageBrokerConfigurer Methode.

+0

Sie haben Recht. Ich verwende StompBrokerRelayMessageHandler auf der Serverseite. Ich bin weitergekommen und habe einen Interceptor hinzugefügt, aber das bringt einen weiteren Fehler. Ich habe die Logs zum ursprünglichen Post hinzugefügt. –

+0

Oh! Es tut uns leid. Ich sehe jetzt das Problem nach dem Debuggen. Bitte, finde eine bearbeitete Version des Interceptors in meiner Antwort. Ich meine das 'StompHeaderAccessor'-Feature. –

+0

Siehe https://jira.spring.io/browse/INT-4360 –

Verwandte Themen