2

外部 ActiveMQ インスタンスからトピック サブスクリプション メッセージを受信するために、メッセージ駆動型 Bean を試していました。

私のテストは、かなりうまく機能している Queue サブスクリプションで最初に開始されました。

次に、トピックのサブスクリプションを試してみたかったのですが、うまくいきません。

これは私が持っているものです:

conf/tomee.xml

<tomee>
    <Resource id="MyJmsResourceAdapter" type="ActiveMQResourceAdapter">
        BrokerXmlConfig  =
        ServerUrl = tcp://192.168.1.176:61616
    </Resource>

    <Resource id="MyJmsConnectionFactory" type="javax.jms.ConnectionFactory">
        ResourceAdapter = MyJmsResourceAdapter
    </Resource>

    <Container id="MyJmsMdbContainer" ctype="MESSAGE">
        ResourceAdapter = MyJmsResourceAdapter
    </Container>

    <Resource id="MyQueue" type="javax.jms.Queue"/>
    <Resource id="MyTopic" type="javax.jms.Topic"/>
</tomee>   

これは MDB です。

import javax.ejb.ActivationConfigProperty;
import javax.ejb.MessageDriven;
import javax.jms.Message;
import javax.jms.MessageListener;

@MessageDriven(mappedName = "MyTopic", activationConfig = { 
    @ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Topic") 
    }
)
public class TestMDBTopic implements MessageListener {

    public TestMDBTopic() {
        super();
    }

    public void onMessage(Message message) {
        System.out.println("TOPIC\tMESSAGE: " + message);

    }

}

理由はわかりませんが、ログから、TomEE がトピックではなくキューを作成していることがわかります。

Nov 19, 2014 11:17:00 PM org.apache.openejb.config.AutoConfig logAutoCreateResource
INFO: Auto-creating a Resource with id 'MyTopic' of type 'javax.jms.Queue for 'TestMDBTopic'.

これのもう1つの証拠は、期間構成を追加するとサーバーが起動しないことです。

@ActivationConfigProperty(propertyName = "subscriptionDurability", propertyValue = "Durable")

サーバーは、これが構成されたタイプの javax.jms.Queue に適合しないと不平を言います。

また、TopicConsumer を愚かな単純なメール メソッドで作成しようとしましたが、これは完全に機能していました。また、構成ファイル全体からキュー構成 (MyQueue) を削除しても、違いはありません。

私が間違っていることを誰か知っていますか?

4

1 に答える 1