如何获取 JMS 负载和 header 消息以及 queue 类型

how to get JMS payload and header Message and queue type

这里只获取QueueBody内容,但想获取有效负载的值,JMS Header值,queue类型等.. 如果我将 createNewEmployee(String newData) 更改为 createNewEmployee(Message newData),它会抛出异常,例如没有找到方法 createNewEmployee(java.lang.String)

    <int-jms:message-driven-channel-adapter id="inBound" destination="requestQueue" channel="msgReceiver" />

    <int:service-activator id="msgRouter" input-channel="msgReceiver"   output-channel="msgSender" ref="routeClass" method="createNewEmployee"/>

    public String createNewEmployee(String newData) {}

import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.messaging.Message;
import javax.jms.TextMessage;
    public String createEmployee(Message message) {
        String response = null;
        try {
            System.out.println("from  message message :" + message);
            TextMessage textMessage=(TextMessage)message;
            String operation=textMessage.getStringProperty("requestType");
            String newData=textMessage.getText();
            System.out.println("from operation :"+operation);
            System.out.println("from createCmcContact :"+newData);
}

听起来你需要这个 属性:

/**
 * Specify whether the JMS request Message's body should be extracted prior
 * to converting into a Spring Integration Message. This value is set to
 * <code>true</code> by default. To send the JMS Message itself as a
 * Spring Integration Message payload, set this to <code>false</code>.
 * @param extractRequestPayload true if the request payload should be extracted.
 */
public void setExtractRequestPayload(boolean extractRequestPayload) {

它是 extract-payload XML <int-jms:message-driven-channel-adapter> 的属性。

但这实际上只是最好的猜测,因为您的 createNewEmployee(Message newData) 不想接受 Message,那么它是 javax.jms.Message 而不是 org.springframework.messaging.Message