Azure サービス バス経由で amqp を使用して、単純な文字列メッセージを .NET から Java クライアントに送信しようとしています。ドキュメントによると、次のような仲介メッセージを送信できるはずです。
message = new BrokeredMessage("this is a text string");
Java クライアントに TextMessage (javax.jms.TextMessage) として表示されます。ただし、JavaでメッセージをTextMessageとしてキャストしようとすると、jms.impl.BytesMessageImplをTextMessageに変換できないという例外が発生します。メッセージが TextMessage ではなく BytesMessage のように見える理由を知っている人はいますか?
ドキュメントによると、BytesMessage は次のように構築されます。
byte[] bytes = { 33, 12, 45, 33, 12, 45, 33, 12, 45, 33, 12, 45 };
message = new BrokeredMessage(bytes);
私がしていないこと....
誰でもこのようなことをする方法を知っていますか?
[更新] 興味深いことに、接続文字列に TransportType=Amqp を指定した場合と指定しない場合の送信コードをテストしました。MessagingFactory 設定も毎回正しいトランスポート タイプに設定されていることを実行中にコードを確認しました。どのトランスポート タイプを使用しても、メッセージは BytesMessage として Java アプリに届きます。メッセージのバイトを見ると、メッセージの送信方法に関係なく、同じ結果が得られます。
@ string 3http://schemas.microsoft.com/2003/10/Serialization/�&BLABLA this is a message
[UPDATE2] 問題の根本原因を突き止めました。私のセットアップでは、メッセージをキューに転送するサブスクライバーがあります。これは、メッセージが台無しになっている場所のようです。AMQP メッセージをキューに直接送信すると、Java アプリに TextMessage として届きます。AMQP を介してトピックにメッセージを送信し、サブスクライバー (フィルターを使用) を介してキューに転送されると、BytesMessage にマングルされます。
では、どうすればこれを適切に機能させることができますか? これが機能するように、キューに転送するサブスクライバーをセットアップする方法はありますか?