3

Artemis REST 機能を自分のプロジェクトの 1 つに統合するのに問題があります。より正確には、キューからメッセージを消費しようとするまでは、すべて問題ありません。

ドキュメントに記載されているプロセスに従っています。API は HATEOAS 原則に従います。つまり、基本的には、呼び出しに使用される URL へのハイパーリンクを返す API 呼び出しを使用します。

で構成されるプロセス

  1. メッセージの公開
  2. メッセージを消費するプルリソースを作成する
  3. プルリソースを介して実際にメッセージを消費する

ポイント3までは正常に動作します。

エンドポイントを呼び出すと例外が発生し、消費するメッセージのタイプが正しくないという不平を言います。スタックトレースは次のとおりです。

Caused by: java.lang.RuntimeException: java.lang.IllegalArgumentException: ClientMessage must be an HTTP message or an Object message: ClientMessage[messageID=105226700092, durable=true, address=jms.queue.DLQ,userID=560c0246-e52b-11e5-82d3-4b37ae7b5e66,properties=TypedProperties[__AMQ_CID=5475aad0-e52b-11e5-82d3-4b37ae7b5e66,_AMQ_ORIG_ADDRESS=jms.queue.ExpiryQueue,_AMQ_ORIG_MESSAGE_ID=100931732707,_AMQ_ORIG_QUEUE=jms.queue.ExpiryQueue]] type: 3
    at org.apache.activemq.artemis.rest.queue.QueueConsumer.pollWithIndex(QueueConsumer.java:190)
    at org.apache.activemq.artemis.rest.queue.QueueConsumer.checkIndexAndPoll(QueueConsumer.java:166)
    at org.apache.activemq.artemis.rest.queue.QueueConsumer.poll(QueueConsumer.java:146)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:497)
    at org.jboss.resteasy.core.MethodInjectorImpl.invoke(MethodInjectorImpl.java:139)
    at org.jboss.resteasy.core.ResourceMethodInvoker.invokeOnTarget(ResourceMethodInvoker.java:295)
    at org.jboss.resteasy.core.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:249)
    at org.jboss.resteasy.core.ResourceLocatorInvoker.invokeOnTargetObject(ResourceLocatorInvoker.java:138)
    at org.jboss.resteasy.core.ResourceLocatorInvoker.invoke(ResourceLocatorInvoker.java:107)
    at org.jboss.resteasy.core.ResourceLocatorInvoker.invokeOnTargetObject(ResourceLocatorInvoker.java:133)
    at org.jboss.resteasy.core.ResourceLocatorInvoker.invoke(ResourceLocatorInvoker.java:107)
    at org.jboss.resteasy.core.ResourceLocatorInvoker.invokeOnTargetObject(ResourceLocatorInvoker.java:133)
    at org.jboss.resteasy.core.ResourceLocatorInvoker.invoke(ResourceLocatorInvoker.java:101)
    at org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:395)
    ... 32 more
Caused by: java.lang.IllegalArgumentException: ClientMessage must be an HTTP message or an Object message: ClientMessage[messageID=105226700092, durable=true, address=jms.queue.DLQ,userID=560c0246-e52b-11e5-82d3-4b37ae7b5e66,properties=TypedProperties[__AMQ_CID=5475aad0-e52b-11e5-82d3-4b37ae7b5e66,_AMQ_ORIG_ADDRESS=jms.queue.ExpiryQueue,_AMQ_ORIG_MESSAGE_ID=100931732707,_AMQ_ORIG_QUEUE=jms.queue.ExpiryQueue]] type: 3
    at org.apache.activemq.artemis.rest.queue.ConsumedMessage.createConsumedMessage(ConsumedMessage.java:63)
    at org.apache.activemq.artemis.rest.queue.QueueConsumer.pollWithIndex(QueueConsumer.java:182)
    ... 48 more

このアプリケーションは、バージョン 1.1.0 の Artemis を含む wildfly 10 内で実行されます (artemis rest バージョン: 1.1.0)。

リクエストでメッセージのコンテンツ タイプを配信しようとしました。しかし、どのタイプを提供しても効果がないようです。

この時点で、私はエラーについてかなり無知です。誰かが私を正しい方向に向けてくれることを願っています。

前もってありがとう、トーマス。

4

1 に答える 1

0

私は同じ問題を抱えていて解決しました:あなたのメッセージにタイプを与えようとしましたか?

session.createMessage(ClientMessage.TEXT_TYPE, true);
于 2016-10-10T15:12:24.960 に答える