Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache camel 如何将文件发送到ActiveMQ队列?_Apache Camel_Jms_Activemq_Jbossfuse_Fuseesb - Fatal编程技术网

Apache camel 如何将文件发送到ActiveMQ队列?

Apache camel 如何将文件发送到ActiveMQ队列?,apache-camel,jms,activemq,jbossfuse,fuseesb,Apache Camel,Jms,Activemq,Jbossfuse,Fuseesb,我在JBoss FUSE中有一个简单的Apache骆驼路线: <?xml version="1.0"?> <blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://www.osgi.org/xmlns/blueprin

我在JBoss FUSE中有一个简单的Apache骆驼路线:

<?xml version="1.0"?>
<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="
             http://www.osgi.org/xmlns/blueprint/v1.0.0 http://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd
             http://camel.apache.org/schema/blueprint http://camel.apache.org/schema/blueprint/camel-blueprint.xsd">

    <bean id="startPolicy" class="org.apache.camel.routepolicy.quartz.CronScheduledRoutePolicy">
        <property name="routeStartTime" value="*/3 * * * * ?"/>
    </bean>

    <bean id="activemq" class="org.apache.activemq.camel.component.ActiveMQComponent">
        <property name="brokerURL" value="tcp://localhost:61616" />
        <property name="userName" value="admin" />
        <property name="password" value="admin" />
    </bean> 

    <camelContext id="blueprintContext" trace="false" xmlns="http://camel.apache.org/schema/blueprint">
          <route id="testRoute" routePolicyRef="startPolicy" autoStartup="false">
            <from uri="activemq:source-queue?username=admin&amp;password=admin"></from>
            <log message="${body}" loggingLevel="INFO"></log>
            <to uri="activemq:sink-queue?username=admin&amp;password=admin"></to>
        </route>    
    </camelContext>
</blueprint>
从我看到的日志中,消息是从队列中使用的,消息正文显示在日志中:

如何将文件发送到ActiveMQ队列?例如,我有一个简单的表单,其中
编码在
多部分/表单数据中。通过使用此表单,我需要向ActiveMQ队列发送POST请求的有效负载

我该怎么做

我将非常感谢您提供的信息

感谢大家。

提供了一个很好的例子,说明了如何做到这一点:

QueueMessageProducer
的方法,该方法将文件消息发送到ActiveMQ代理:

private void sendFileAsBytesMessage(File file) throws JMSException, IOException {
    BytesMessage bytesMessage = session.createBytesMessage();
    bytesMessage.setStringProperty("fileName", file.getName());
    bytesMessage.writeBytes(fileManager.readfileAsBytes(file));

    msgProducer.send(bytesMessage);
}
,其中:

ConnectionFactory connFactory = 
    new ActiveMQConnectionFactory(username, password, activeMqBrokerUri);
Connection connection = connFactory.createConnection();
ActiveMQSession session = 
    (ActiveMQSession) connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
FileAsByteArrayManager
类,该类对文件执行低级操作:

public class FileAsByteArrayManager {

    public byte[] readfileAsBytes(File file) throws IOException {    
        try (RandomAccessFile accessFile = new RandomAccessFile(file, "r")) {
            byte[] bytes = new byte[(int) accessFile.length()];
            accessFile.readFully(bytes);
            return bytes;
        }
    }

    public void writeFile(byte[] bytes, String fileName) throws IOException {
        File file = new File(fileName);
        try (RandomAccessFile accessFile = new RandomAccessFile(file, "rw")) {
            accessFile.write(bytes);
        }
    }
}

好的,一旦获得了有效负载,就将其转换为字节或字符串,并将其发送到activemq端点。
public class FileAsByteArrayManager {

    public byte[] readfileAsBytes(File file) throws IOException {    
        try (RandomAccessFile accessFile = new RandomAccessFile(file, "r")) {
            byte[] bytes = new byte[(int) accessFile.length()];
            accessFile.readFully(bytes);
            return bytes;
        }
    }

    public void writeFile(byte[] bytes, String fileName) throws IOException {
        File file = new File(fileName);
        try (RandomAccessFile accessFile = new RandomAccessFile(file, "rw")) {
            accessFile.write(bytes);
        }
    }
}