AmazonMQキューにJavaを使用したBLOBファイルをアップロードします(ActiveMQの)

ベン:

私はアマゾンMQと仕事をしなければなりません。アマゾンMQは、ActiveMQの基づいています。私はいくつかのコードを発見し、それがキューにブロブメッセージ(PDFサイズ230KB)を置く必要があります。しかし、私は以下のエラー・スタックでエラーがプログラムを実行する場合。

これは私のコードです:

private final static String WIRE_LEVEL_ENDPOINT = "ssl://<examplednsname>-1.amazonaws.com:61617";
private final static String ACTIVE_MQ_USERNAME = "test123";
private final static String ACTIVE_MQ_PASSWORD = "test123";

public static void sendFileViaQueue(String uri, String queueName) throws JMSException {
    File file = new File("test.pdf");
    ConnectionFactory connectionFactory = null;
    Connection connection = null;
    Session session = null;
    BlobMessage blobMsg = null;
    MessageProducer producer = null;
    try {
        connectionFactory = new ActiveMQConnectionFactory(ACTIVE_MQ_USERNAME, ACTIVE_MQ_PASSWORD, WIRE_LEVEL_ENDPOINT);
        connection = connectionFactory.createConnection();
        connection.start();
        session = connection.createSession(Boolean.TRUE, Session.AUTO_ACKNOWLEDGE);
        producer = session.createProducer(session.createQueue(queueName));
        blobMsg = ((ActiveMQSession) session).createBlobMessage(file);
        blobMsg.setStringProperty("FILE.NAME", file.getName());
        blobMsg.setLongProperty("FILE.SIZE", file.length());
        producer.send(blobMsg);
        session.commit();
    } finally {
        closeQuietly(producer);
        closeQuietly(session);
        closeQuietly(connection);
    }
}

それは8080にアップロードするために何かをしたいが、私はローカルでの設定は何もなかったように思えます。それだけで、それthatsのキューにPDFをアップロードする必要があります。

誰にこの問題を解決するためのアイデアを持っていますか?それは複雑なだけキューにブロブをアップロードすることをすべきではありません。

これは私が取得していますスタックトレースです。

javax.jms.JMSException: PUT failed to: http://localhost:8080/uploads/ID:bpSligro-PC-50920-1584558692848-1:1:1:1:1
    at org.apache.activemq.util.JMSExceptionSupport.create(JMSExceptionSupport.java:72)
    at org.apache.activemq.command.ActiveMQBlobMessage.onSend(ActiveMQBlobMessage.java:177)
    at org.apache.activemq.ActiveMQSession.send(ActiveMQSession.java:1952)
    at org.apache.activemq.ActiveMQMessageProducer.send(ActiveMQMessageProducer.java:288)
    at org.apache.activemq.ActiveMQMessageProducer.send(ActiveMQMessageProducer.java:223)
    at org.apache.activemq.ActiveMQMessageProducerSupport.send(ActiveMQMessageProducerSupport.java:241)
    at nl.bpittens.mq.AmazonMQExample.sendFileViaQueue(AmazonMQExample.java:81)
    at nl.bpittens.mq.AmazonMQExample.main(AmazonMQExample.java:52)
Caused by: java.io.IOException: PUT failed to: http://localhost:8080/uploads/ID:bpSligro-PC-50920-1584558692848-1:1:1:1:1
    at org.apache.activemq.blob.DefaultBlobUploadStrategy.uploadStream(DefaultBlobUploadStrategy.java:67)
    at org.apache.activemq.blob.DefaultBlobUploadStrategy.uploadFile(DefaultBlobUploadStrategy.java:44)
    at org.apache.activemq.blob.BlobUploader.upload(BlobUploader.java:53)
    at org.apache.activemq.command.ActiveMQBlobMessage.onSend(ActiveMQBlobMessage.java:174)
    ... 6 more
Caused by: java.net.ConnectException: Connection refused: connect
    at java.net.DualStackPlainSocketImpl.connect0(Native Method)
    at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:79)
    at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
    at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
    at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
    at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172)
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
    at java.net.Socket.connect(Socket.java:589)
    at java.net.Socket.connect(Socket.java:538)
    at sun.net.NetworkClient.doConnect(NetworkClient.java:180)
    at sun.net.www.http.HttpClient.openServer(HttpClient.java:463)
    at sun.net.www.http.HttpClient.openServer(HttpClient.java:558)
    at sun.net.www.http.HttpClient.<init>(HttpClient.java:242)
    at sun.net.www.http.HttpClient.New(HttpClient.java:339)
    at sun.net.www.http.HttpClient.New(HttpClient.java:357)
    at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(HttpURLConnection.java:1220)
    at sun.net.www.protocol.http.HttpURLConnection.plainConnect0(HttpURLConnection.java:1156)
    at sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:1050)
    at sun.net.www.protocol.http.HttpURLConnection.connect(HttpURLConnection.java:984)
    at sun.net.www.protocol.http.HttpURLConnection.getOutputStream0(HttpURLConnection.java:1334)
    at sun.net.www.protocol.http.HttpURLConnection.getOutputStream(HttpURLConnection.java:1309)
    at org.apache.activemq.blob.DefaultBlobUploadStrategy.uploadStream(DefaultBlobUploadStrategy.java:60)
    ... 9 more

通常のJMSを送信するとTextMessage問題なく動作します。

ジャスティン・バートラム:

で述べたようにドキュメント、「ブロブ」のメッセージ:

大量のBLOB(バイナリラージオブジェクト)は、いくつかのアウトオブバンド輸送機構の周り送信されることを可能にします。可能なアウトオブバンドメカニズムは、HTTPまたはFTPまたはSCPまたはいくつかの他のポイントツーポイントプロトコルであってもよいです。

実際のバイナリデータを送信しなければならないことに注意してください「一部でアウトオブバンドのトランスポートメカニズム。」言い換えれば、ブロブは、実際にキューに行きません。ブロブは、アップロードされてどこか別の場所とキューに入るメッセージは、単純にその場所を指しています。

あなたは使用して転送ポリシーを設定する必要がありjms.blobTransferPolicy.uploadUrl、クライアントのURLにパラメータを。デフォルトの転送ポリシーのデフォルトのアップロードURLは、http://localhost:8080/uploads/あなたのクライアントは、バイナリデータをアップロードするために使用しようとしているものです。

あなたがキューに直接任意の大きさのメッセージを送信したい場合は、むしろバンドメカニズムのいくつかのアウトを使用してよりに移動することを検討ActiveMQのアルテミスサポートしている機能を

アマゾンMQを使用して、あなたしている立ち往生した場合、私はあなたがあなたが個々のメッセージの中に入れて、その後でそれらのチャンクを組み立て直すことができることを小さなチャンクにファイルを分割手動ソリューションのいくつかの種類以外の他のソリューションを持っているとは思いません消費するアプリケーション。

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=321021&siteId=1