当前位置: 首页 > 知识库问答 >
问题:

JavaActiveMQ STOMPSSH:对方法sun.security.ssl.SSLSocketImpl.setHost的非法反射访问操作

乐正心思
2023-03-14

我正在为AmazonMQ编写一个简单的Java JMS QueueBrowser客户端,它通过< code>ssh运行带有< code>stomp协议的ActiveMQ(因此传输是< code>stomp ssl:

// java
import java.util.Enumeration;

// jms
import javax.jms.IllegalStateException;
import javax.jms.JMSException;
import javax.jms.Queue;
import javax.jms.QueueBrowser;
import javax.jms.QueueSession;
import javax.jms.Session;
import javax.jms.ConnectionFactory;
import javax.jms.Connection;

// activemq
import org.apache.activemq.ActiveMQConnectionFactory;

public class QueueBrowserExample {
    public static void main(String[] args) throws Exception {

        System.out.println("init");
        try {

            final String PORT = "61616";
            final String PROTOCOL = "stomp+ssl";
            final String HOST = "xxx.mq.us-east-1.amazonaws.com";
            final String connectionString = PROTOCOL + "://" + HOST + ":" + PORT;

            System.out.println("attempt to connect to " + connectionString);

            ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(connectionString);
            Connection connection = connectionFactory.createConnection("admin", "admin");
            connection.start();
            Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
            Queue queue = session.createQueue("Test");
            QueueBrowser queueBrowser = session.createBrowser(queue);
            Enumeration msgs = queueBrowser.getEnumeration();

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

由于所使用的传输方式,我得到了一个< code > javax . JMS . JMS exception exec epion(我假设是< code>stomp ssl)

javax.jms.JMSException: Could not create Transport. Reason: java.lang.IllegalArgumentException: Invalid connect parameters: {wireFormat.host=b-02b566af-1f0d-4d48-ad24-229a813a53fb-1.mq.us-east-1.amazonaws.com}
        at org.apache.activemq.util.JMSExceptionSupport.create(JMSExceptionSupport.java:36)
        at org.apache.activemq.ActiveMQConnectionFactory.createTransport(ActiveMQConnectionFactory.java:319)
        at org.apache.activemq.ActiveMQConnectionFactory.createActiveMQConnection(ActiveMQConnectionFactory.java:332)
        at org.apache.activemq.ActiveMQConnectionFactory.createConnection(ActiveMQConnectionFactory.java:253)
        at QueueBrowserExample.main(QueueBrowserExample.java:37)
Caused by: java.lang.IllegalArgumentException: Invalid connect parameters: {wireFormat.host=b-02b566af-1f0d-4d48-ad24-229a813a53fb-1.mq.us-east-1.amazonaws.com}
        at org.apache.activemq.transport.TransportFactory.doConnect(TransportFactory.java:122)
        at org.apache.activemq.transport.TransportFactory.connect(TransportFactory.java:64)
        at org.apache.activemq.ActiveMQConnectionFactory.createTransport(ActiveMQConnectionFactory.java:317)
        ... 3 more

ActiveMQ后端正在使用STOMP,我无法访问它。因此,我必须弄清楚如何“管理”队列(只监视消息,而不是处理消息),于是我来到了QueueBrowser和JMS。

共有1个答案

孙光临
2023-03-14

不支持JMS over STOMP。

请记住,JMS只是一个API。大多数代理之间的底层有线协议是不同的。在ActiveMQ“Classic”(这是Amazon MQ使用的)中,您可以通过OpenWire协议或AMQP(这需要使用Qpid JMS库)来使用JMS。不支持JMS over STOMP。

在本例中,您使用的是OpenWire JMS客户端,因为您使用的是< code > org . Apache . ActiveMQ . activemqconnectionfactory 。无论您在连接字符串中指定什么,客户端都将使用OpenWire协议。

STOMP不支持JMS公开的许多功能。STOMP尤其不支持队列浏览器。

 类似资料:
  • JDK11+spring批处理 有人知道那些警告是什么意思吗: 警告:发生了非法的反射访问操作警告:org.springframework.cglib.core.reflectutils$1(jar:file:/users/boru/downloads/spcljr/build/libs/spcljr-0.0.1-snapshot.jar!/boot-inf/lib/spring-core-5.0

  • 在尝试构建时,。我按照其他人的建议添加了,但仍然得到相同的错误。 有什么建议吗? pom.xml

  • 我正在使用Apache POI处理excel文件,从Java9开始,我得到了这条消息,根据这篇文章JDK9:发生了非法的反射访问操作。pySystemState我们应该等待开发人员修复这个问题,但是我应该在新的生产版本中保留它吗?我想跳过警告应该没问题。

  • 我正在使用反射来调用java.util.Stream.Stream上的方法,但由于实际实现(ReferencePipeline等)具有运行的实际代码,因此在调用时会收到非法的反射访问警告,如果没有该调用,它将无法工作。我想知道是否有一种方法可以自动将其委托给一个访问不非法的超级方法?也就是说,我想调用,其中是合法的,而不是或任何实现。 编辑这里是一些代码。是通过反射获得的流的具体实例。

  • 我试图使用Java9(JDK9)运行DMelt programs(http://jwork.org/DMelt/)程序,它给出了如下错误: 我该怎么修好它?我试图在脚本“dmelt.sh”的最后一行添加-illegal-access=permit(我在Linux中使用bash),但这并没有解决这个问题。我对此很沮丧。我经常使用这个程序,很长一段时间了。也许我永远不应该转到JDK9