当前位置: 首页 > 知识库问答 >
问题:

Apache Camel-消息正文中的特殊字符

段晨
2023-03-14
Sp�ASr�)�x-opt-jms-destQ�x-opt-jms-msg-typeQSs�^
�/ID:53e1ce3a-4drf-4f8a-9ff9-845fe0d0006e:3:1:1-1@�queue://testcamelwithamqp@@@@@@�qd�Sw�1:"test message"

我的实际消息1:“test message”,但不知何故,JMS头作为特殊字符放在消息正文中。有什么帮助解决的吗?

下面是Spring Boot代码示例

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@EnableAutoConfiguration
@SpringBootApplication
public class CamelMQApplication {

    public static void main(String[] args) {
        SpringApplication.run(CamelMQApplication.class, args);
    }
}
import org.apache.camel.CamelContext;
import org.apache.camel.component.amqp.AMQPComponent;
import org.apache.qpid.jms.JmsConnectionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class AmqpConfigInternal {

    @Value("${INTERNAL_SERVICE_USERNAME}")
    private String userName;
    @Value("${INTERNAL_SERVICE_PASSWORD}")
    private String pass;
    @Value("${INTERNAL_REMOTE_URI}")
    private String remoteUri;

    @Autowired
    private CamelContext camelInternal;

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public String getPass() {
        return pass;
    }

    public void setPass(String pass) {
        this.pass = pass;
    }

    public String getRemoteUri() {
        return remoteUri;
    }

    public void setRemoteUri(String remoteUri) {
        this.remoteUri = remoteUri;
    }

    private JmsConnectionFactory internalConnectionFactory() throws Exception {
        JmsConnectionFactory jmsConnectionFactory = new JmsConnectionFactory();
        jmsConnectionFactory.setRemoteURI(remoteUri);
        jmsConnectionFactory.setUsername(userName);
        jmsConnectionFactory.setPassword(pass);
        return jmsConnectionFactory;
    }

    @Bean
    public AMQPComponent internalAmqpConnection() throws Exception {
        AMQPComponent amqp = new AMQPComponent();
        amqp.setConnectionFactory(internalConnectionFactory());
        camelInternal.addComponent("amqpInternal", amqp);
        return amqp;
    }

}

import org.apache.camel.ExchangePattern;
import org.apache.camel.builder.RouteBuilder;
import org.springframework.stereotype.Component;

@Component
public class SampleAutowiredAmqpRouteTest extends RouteBuilder {

    @Override
    public void configure() throws Exception {
        from("{{route1.from}}")
        .convertBodyTo(String.class, "UTF-8")
        .removeHeaders("*")
        .log("From ActiveMQ: ${body}")
        .to("{{route1.to}}")
        .convertBodyTo(String.class, "UTF-8")
        .removeHeaders("*");

    }

}
import org.apache.camel.CamelContext;
import org.apache.camel.component.amqp.AMQPComponent;
import org.apache.qpid.jms.JmsConnectionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class AmqpConfigRouteTest {

    @Value("${ACTIVEMQ_SERVICE_USERNAME}")
    private String userName;
    @Value("${ACTIVEMQ_SERVICE_PASSWORD}")
    private String pass;
    @Value("${ACTIVEMQ_REMOTE_URI}")
    private String remoteUri;

    @Autowired private CamelContext camelRouteTest;

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public String getPass() {
        return pass;
    }

    public void setPass(String pass) {
        this.pass = pass;
    }

    public String getRemoteUri() {
        return remoteUri;
    }

    public void setRemoteUri(String remoteUri) {
        this.remoteUri = remoteUri;
    }

    private JmsConnectionFactory amqp1ConnectionFactory() throws Exception {
        JmsConnectionFactory jmsConnectionFactory = new JmsConnectionFactory();
        jmsConnectionFactory.setRemoteURI(remoteUri);
        jmsConnectionFactory.setUsername(userName);
        jmsConnectionFactory.setPassword(pass);
        return jmsConnectionFactory;
    }

    @Bean
    public AMQPComponent amqp1Connection() throws Exception {
        AMQPComponent amqp = new AMQPComponent();
        amqp.setConnectionFactory(amqp1ConnectionFactory());
        camelRouteTest.addComponent("amqpRouteTest", amqp);
        return amqp;
    }
}
application.properties

server.port=8071
camel.springboot.name = CamelTest
camel.springboot.main-run-controller = true

INTERNAL_REMOTE_URI=amqp://actimqserver1:12345
INTERNAL_SERVICE_USERNAME=admin
INTERNAL_SERVICE_PASSWORD=admin

ACTIVEMQ_REMOTE_URI=amqp://actimqserver2:12345
ACTIVEMQ_SERVICE_USERNAME=admin
ACTIVEMQ_SERVICE_PASSWORD=admin

route1.from = amqpInternal:test4camelamqpSrcQ
route1.to = amqpRouteTest:test4camelamqpTgtQ


共有1个答案

申博厚
2023-03-14

您使用的是带有AMQP协议的ActiveMQ。您是否也为此协议配置了代理?

例如,传输连接器:

<transportConnector name="amqp" uri="amqp://0.0.0.0:5672"/>

老实说,我不知道当您使用普通的ActiveMQ代理(默认协议是OpenWire)并向其发送AMQP消息时会发生什么。

 类似资料:
  • 问题内容: 我试图编写一个文件名带有特殊字符的文件,例如“téééê.mp3”,但文件名始终保留“?” 我尝试了几种方法来代替字符“é”,但没有找到解决方法: 我也尝试过这种方式。 问题答案: 尝试: 现在,如果这是您的文件系统不支持此类文件名的问题,您将得到一个;。不同于,新的API拒绝创建可能最终无法读取的文件名。 如果确实无法创建路径,那么,您将必须找到某种逃避和撤消逃避的方法。也许写一个别

  • 我有一个HashMap,里面有键和值。我想用字符串中映射的值替换键。 在字符串中,键被写成@keyname或@“keyname”,这些应替换为map.get(“keyname”) 假设我们的地图是这个 所以如果我们处理字符串“Hello world,Iam@key1 years old.”,它将变成“Hello world,Iam 2 years old.”。 我们可以用@“key1”代替@key

  • 我使用Wiremock服务器模拟响应,并使用JSON格式模拟响应。 这不起作用,因为电子邮件中的“@”未编码。我需要传递“test_user@gmail”才能使请求正常工作。 这里只有一个地方有零钱。但对于其他模拟,请求正文有许多特殊字符**(@,%*\n\s)**。有没有办法在Wiremock中处理编码部分。 另外,有没有办法在url中编码字符串?

  • 我试图为密码字段创建一个验证,它只允许字符和 时有什么区别,以及哪些字符来自

  • 关于字符集和替代字形 除键盘上可看到的字符之外,字体中还包括许多字符。根据字体的不同,这些字符可能包括连字、分数字、花饰字、装饰字、序数字、标题和文体替代字、上标和下标字符、变高数字和全高数字。字形是特殊形式的字符。例如,在某些字体中,大写字母 A 有几种形式可用,如花饰字或小型大写字母。 插入替代字形的方式有两种: 可以使用 “字形 ”面板来查看和插入任何字体中的字形。 可以使用 “OpenTy

  • 一些字符在 XML 中有特殊的含义,只能够通过其实体名称输入 字符 写法 缩写涵义 < &lt; less than > &gt; greater than & &amp; ampersand " &quot; quote ' &apos; apostrophe 空格 &nbsp; none-break space 通常需要使用实体输入的字符包括<、&、空格   XML 会将任意数量的空格解析为一