嗨我在我的春季启动项目中使用SQS,我正尝试发送ByteMessage队列。在侦听器端,我试图将消息转换为byteMessage,但它不工作,我得到异常
org.springframework.jms.listener.adapter.ListenerExecutionFailedException: Listener method 'public void com.sterling.ven
dor.integration.SQSListeners.IFNRequestListener.recieveRequest(javax.jms.Message)' threw exception; nested exception is
java.lang.ClassCastException: com.amazon.sqs.javamessaging.message.SQSTextMessage cannot be cast to javax.jms.BytesMessagemessageSender,和
package com.sterling.vendor.integration.service.impl;
import javax.jms.BytesMessage;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.Session;
import javax.jms.TextMessage;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jms.core.JmsTemplate;
import org.springframework.jms.core.MessageCreator;
import org.springframework.stereotype.Service;
import com.sterling.vendor.integration.service.MessageServiceClient;
@Service("messageServiceClient")
public class MessageServiceClientImpl implements MessageServiceClient {
final static Logger logger = LoggerFactory.getLogger(MessageServiceClientImpl.class);
@Autowired
private JmsTemplate sqsJmsTemplate;
@Override
public void sendCompress(final String message, String queueName) {
logger.debug("Sending request message to {}", queueName);
sqsJmsTemplate.send(queueName, new MessageCreator() {
@Override
public Message createMessage(Session session) throws JMSException {
BytesMessage bytesMessage = session.createBytesMessage();
bytesMessage.writeBytes(DataCompressUtil.compress(message));
return bytesMessage;
}
});
}
}消息监听
@Service
public class IFNRequestListener{
private static final Logger LOGGER = LoggerFactory.getLogger(IFNRequestListener.class);
@Value("${aws.sqs.ifn.error}")
private String errorQueue;
@Autowired
private MessageServiceClient messageServiceClient;
@Autowired
private VendorRequestProcessor vendorRequestProcessorImpl;
@Autowired
VendorPostProcessor vendorPostProcessor;
@JmsListener(destination = "${aws.sqs.ifn.request}")
public void recieveRequest(Message message) {
LOGGER.debug("Message received at IFN Request Listener.");
String strMessagePayload = null;
try {
BytesMessage byteMessage =(BytesMessage)message;
byte[] payload=new byte[(int) byteMessage.getBodyLength()];
byteMessage.readBytes(payload);
strMessagePayload = DataCompressUtil.unCompress2String(payload);
LOGGER.info("IFN SQS RequestListener received message Payload");
} catch (JMSException jmsExcp) {
LOGGER.error("Failed to parse message body, cannot process this request any further...", jmsExcp);
return;
}
processMessage(strMessagePayload);
}
}虽然我不发送消息,因为SQSTextMessage仍然监听器收到消息作为我不想要的SQSTextMessage。任何人都可以帮助我,让我知道如何让我的原始消息在侦听器端得到我的byteMessage?