Java 使用消息驱动bean从主题ApacheAppollo获取消息

Java 使用消息驱动bean从主题ApacheAppollo获取消息,java,activemq,apollo,Java,Activemq,Apollo,我创建了一个java应用程序,它使用消息驱动bean(MDB)通过glassfish中的资源适配器activeMq 5.10从主题ApacheApplo获取消息。当我使用ApacheActiveMQ时,它可以正常工作,但不能与ApacheAppollo一起工作。我使用mqtt发送带有主题a的消息,并使用mqtt侦听该主题并获取消息。但当我使用MDB进行监听时,它无法获得任何消息。我看到阿波罗控制台,选项卡虚拟主机->主题。我单击用于发送和接收消息的主题。该主题有消费者和生产者,“排队:2项/2.

我创建了一个java应用程序,它使用消息驱动bean(MDB)通过glassfish中的资源适配器activeMq 5.10从主题ApacheApplo获取消息。当我使用ApacheActiveMQ时,它可以正常工作,但不能与ApacheAppollo一起工作。我使用mqtt发送带有主题a的消息,并使用mqtt侦听该主题并获取消息。但当我使用MDB进行监听时,它无法获得任何消息。我看到阿波罗控制台,选项卡虚拟主机->主题。我单击用于发送和接收消息的主题。该主题有消费者和生产者,“排队:2项/2.72 kb”,但消费者“传输=0”。我不知道如何与阿波罗合作

apollo.xml

<broker xmlns="http://activemq.apache.org/schema/activemq/apollo">
  <notes>
       The default configuration with tls/ssl enabled.
  </notes>
  <log_category console="console" `enter code here`security="security"connection="connection"audit="audit"/>
  <authentication domain="apollo"/>
  <!-- Give admins full access -->
  <access_rule allow="admins" action="*"/>
  <access_rule allow="*" action="*"/> 
  <virtual_host id="benchmark-broker">
     <host_name>benchmark-broker</host_name>
     <host_name>localhost</host_name>
     <host_name>127.0.0.1</host_name> 
     <authentication enabled="false"/>
     <topic slow_consumer_policy="block" >
       <subscription tail_buffer="4k"/>
     </topic>
  </virtual_host>
  <web_admin bind="http://0.0.0.0:9022"/>
  <web_admin bind="https://127.0.0.1:61681"/>
  <connector id="tcpMqtt" bind="tcp://0.0.0.0:7521" connection_limit="60000">
      <mqtt max_message_length="104857600"  />
  </connector>
 <connector id="tcpOpenwire" bind="tcp://0.0.0.0:9021" connection_limit="60000">
     <openwire tight_encoding="false" tcp_no_delay="true"/>
 </connector>
</broker>

即使阿波罗有一个伟大的现代内核,它也不具备ActiveMQ的所有功能。虽然ActiveMQ支持在生产者/消费者之间混合有线协议,但Apollo不支持。如果您切换到Apollo,您也会切换到使用MQTT。

即使Apollo有一个很棒的现代内核,它也没有ActiveMQ的所有功能。虽然ActiveMQ支持在生产者/消费者之间混合有线协议,但Apollo不支持。如果您切换到Apollo,您也会切换到使用MQTT进行消费。

我明白了,当我尝试使用ActiveMQConnectionFactory创建类似Apollo的消费者和生产者示例时,MDB可以得到消息。MQTT可能不适用于apollo中的MDB,或者我的代码中有错误。MDB使用OpenWire协议,即使用JMS接口/语义。所以,不,您不能在apollo中使用MQTT消息,我知道,当我尝试使用ActiveMQConnectionFactory创建类似apollo的消费者和生产者示例时,MDB可以获得消息。MQTT可能不适用于apollo中的MDB,或者我的代码中有错误。MDB使用OpenWire协议,即使用JMS接口/语义。所以,不,您不能在apollo中使用MQTT消息,我知道,当我尝试使用ActiveMQConnectionFactory创建类似apollo的消费者和生产者示例时,MDB可以获得消息。MQTT可能不适用于apollo中的MDB,或者我的代码中有错误。MDB使用OpenWire协议,即使用JMS接口/语义。所以,不,您不能在Apollo中使用MQTT消息
    String user = env("APOLLO_USER", "admin");
    String password = env("APOLLO_PASSWORD", "password");
    String host = env("APOLLO_HOST", "192.168.0.54");
    int port = Integer.parseInt(env("APOLLO_PORT", "7521"));
    final String destination = arg(args, 0, "cuongdm17");
    int messages = 1;
    String body = "test";

    MQTT mqtt = new MQTT();
    mqtt.setHost(host, port);
    mqtt.setUserName(user);
    mqtt.setPassword(password);

    FutureConnection connection = mqtt.futureConnection();
    connection.connect().await();
    final LinkedList<Future<Void>> queue = new LinkedList<Future<Void>>();
    UTF8Buffer topic = new UTF8Buffer(destination);
    for (int i = 1; i <= messages; i++) {
        queue.add(connection.publish(topic, msg, QoS.AT_LEAST_ONCE, false));
    }
@MessageDriven(activationConfig = {
@ActivationConfigProperty(propertyName = "acknowledgeMode", propertyValue = "Auto-acknowledge"),
@ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Topic"),
@ActivationConfigProperty(propertyName = "destination", propertyValue = "cuongdm17")
})
public class Cuongdm17 extends AmiAbstractMQTTProcessor implements MessageListener, Serializable {

static final Logger logger = Logger.getLogger(AmiMonitorProcessor.class.getName());

public Cuongdm17() {
}

@Override
protected Logger getLogger() {
    return logger;
}

/**
 * Handler MQTT (already transcript to JMS) messages from DCU Device
 *
 * @param message
 */
@Override
public void onMessage(Message message) {
    try {
        info("cuongdm17");
    } catch (Exception e) {
        error("Error when processing onMessage, error message=" + e.getMessage() + ", message trace=" + message, e);
    }
}

@Override
protected void receiveMessage(MQTTPayloadData payload) throws Exception {
    info("cuongdm17");
}

@Override
public String toString() {
    return "Current-Info Processor";
}
}