在我的消息驱动项目中,我有一点需要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上设置信任库?
否,您不能直接在jmxConnection上设置信任库,但是,您可以使用该环境映射为jmxConnect设置SslRMIServerSocketFactory和SslRMIClientSocketFactory。这两个类将管理服务器和客户端的SSL套接字。我相信上面两个类的环境映射的键分别是"jmx.remote.rmi.server.socket.factory"one_answers"jmx.remote.rmi.client.socket.factory"。
您还需要在spring项目中设置"javax.net.ssl.trustStore"one_answers"javax.net.ssl.ttrustStorePassword"java属性(可以在运行时传入环境变量,也可以在应用程序中显式设置它们)。之后,jmxConnection也将使用ssl.