0

在我的消息驱动项目中,我有一点需要 JMX,即删除消息队列。

目前,我创建了 qpid 代理的 MBean,如下所示:

<bean name="jmxConnection"
    class="org.springframework.jmx.support.MBeanServerConnectionFactoryBean"
    p:serviceUrl="service:jmx:rmi:///jndi/rmi://localhost:8999/jmxrmi" >
    <property name="environment">
        <map>
            <entry key="jmx.remote.credentials">
                <bean class="org.springframework.util.StringUtils"
                    factory-method="commaDelimitedListToStringArray">
                    <constructor-arg value="username, password" />
                </bean>
            </entry>
        </map>
    </property>
</bean>

<bean id="managedBroker" class="org.springframework.jmx.access.MBeanProxyFactoryBean"
    p:objectName='org.apache.qpid:type=VirtualHost.VirtualHostManager,VirtualHost="default"'
    p:server-ref="jmxConnection" 
    p:proxyInterface="org.apache.qpid.management.common.mbeans.ManagedBroker" />

那行得通,但我想使用 SSL。在代理端,我可以将 SSL 设置为 JMX 连接。

Qpid 手册说必须通过 jconsole 设置信任库。

jconsole -J-Djavax.net.ssl.trustStore=jmxtruststore.jks -J-Djavax.net.ssl.trustStorePassword=password

是否可以使用 Spring 直接在 jmxConnection 上设置信任库?

4

1 回答 1

0

不,您不能直接在 jmxConnection 上设置信任库,但是,您可以使用该环境映射为 jmxConnection 设置 SslRMIServerSocketFactory 和 SslRMIClientSocketFactory。这两个类将管理服务器和客户端的 SSL 套接字。我相信上述两个类的环境映射键分别是“jmx.remote.rmi.server.socket.factory”和“jmx.remote.rmi.client.socket.factory”。

您还需要在 spring 项目中设置“javax.net.ssl.trustStore”和“javax.net.ssl.trustStorePassword”java 属性(通过在运行时传入环境变量或在应用程序中显式设置它们你自己。在此之后,你的 jmxConnection 也将使用 SSL。

于 2016-02-05T14:11:58.063 回答