当前位置: 首页 > 工具软件 > OpenJMS > 使用案例 >

java开源消息服务(OpenJMS&ActiveMQ)-OpenJMS学习笔记四(配置-连接器)

巫马山
2023-12-01

本章我们将研究OpenJMS的配置信息。

连接器

OpenJMS的连接器提供了TCP,RMI,HTTP和SSL等协议连接方式。

也就是提供了以下类型的连接器

连接器 描述
TCP 使用TCP/IP套接字
TCPS 使用安全套接字
RMI 使用RMI
HTTP 使用HTTP提供连接
HTTPS 使用基于安全套接字层的HTTP连接
Embedded 同一个JVM中通信

这些类型基本满足了我们的需求。下面举例客户端如何调用这些类型的连接器。

TCP

 Hashtable properties = new Hashtable();
    properties.put(Context.INITIAL_CONTEXT_FACTORY, 
                   "org.exolab.jms.jndi.InitialContextFactory");
    properties.put(Context.PROVIDER_URL, "tcp://localhost:3035/");
    Context context = new InitialContext(properties);

说明

Provider_URL信息我们在java开源消息服务(OpenJMS&ActiveMQ)-OpenJMS学习笔记三(调用示例)中提到过,当时说tcp或者rmi开头jndi服务地址都可以用。
就是使用的连接器类型不一样,那我当时配置了TCP和RMI连接器。
 

TCPS

Hashtable properties = new Hashtable();
properties.put(Context.INITIAL_CONTEXT_FACTORY, 
"org.exolab.jms.jndi.InitialContextFactory");
properties.put(Context.PROVIDER_URL, "tcps://localhost:3035/");
properties.put("org.exolab.jms.net.tcps.keyStore", "<keystore>");
properties.put("org.exolab.jms.net.tcps.keyStorePassword", "<password>");
properties.put("org.exolab.jms.net.tcps.trustStore", "<keystore>");
Context context = new InitialContext(properties);

说明

在这里我们多了几个连接属性。
名字 描述
"org.exolab.jms.net.tcps.keyStore" keystore文件的路径,如果不指定,将使用默认的keystore。同义于"javax.net.ssl.keyStore"系统变量。
"org.exolab.jms.net.tcps.keyStorePassword" keystore的密码。如果不指定,将使用默认的密码。同义于"javax.net.ssl.keyStorePassword" 系统变量。
"org.exolab.jms.net.tcps.keyStoreType" keystore类型,如果不指定,使用默认的“JKS”。同义于"javax.net.ssl.keyStoreType" 系统变量。
"org.exolab.jms.net.tcps.trustStore" truststore路径. 如果不指定,将使用默认的truststore.同义于"javax.net.ssl.trustStore"系统变量。
"org.exolab.jms.net.tcps.trustStorePassword" truststore的密码。如果不指定,将使用默认的密码。同义于"javax.net.ssl.trustStorePassword"系统变量。
"org.exolab.jms.net.tcps.trustStoreType" truststore 类型,如果不指定,使用默认的“JKS”。同义于"javax.net.ssl.trustStoreType系统变量。

RMI

Hashtable properties = new Hashtable();
properties.put(Context.INITIAL_CONTEXT_FACTORY, 
"org.exolab.jms.jndi.InitialContextFactory");
properties.put(Context.PROVIDER_URL, "rmi://localhost:1099/");
Context context = new InitialContext(properties);

HTTP

Hashtable properties = new Hashtable();
properties.put(Context.INITIAL_CONTEXT_FACTORY, 
"org.exolab.jms.jndi.InitialContextFactory");
properties.put(Context.PROVIDER_URL, "http://localhost:80/");
Context context = new InitialContext(properties);

说明

HTTP也提供了使用代理的一些连接属性,如下

名字 描述
"org.exolab.jms.net.http.proxyHost" 指定代理服务器地址.同义于"http.proxyHost"系统变量.
"org.exolab.jms.net.http.proxyPort" I指定代理服务主机端口. 同义于"http.proxyPort" 系统变量.
"org.exolab.jms.net.http.proxyUser" 指定登入代理服务器的用户名
"org.exolab.jms.net.http.proxyPassword" 指定登入代理服务器的密码

HTTPS

 Hashtable properties = new Hashtable();
    properties.put(Context.INITIAL_CONTEXT_FACTORY, 
                   "org.exolab.jms.jndi.InitialContextFactory");
    properties.put(Context.PROVIDER_URL, "https://localhost:443/");
    properties.put("org.exolab.jms.net.https.keyStore", "<keystore>");
    properties.put("org.exolab.jms.net.https.keyStorePassword", "<password>");
    properties.put("org.exolab.jms.net.https.trustStore", "<keystore>");
    Context context = new InitialContext(properties);

说明

名字

描述

"org.exolab.jms.net.https.keyStore"

keystore文件的路径,如果不指定,将使用默认的keystore。同义于"javax.net.ssl.keyStore"系统变量。

"org.exolab.jms.net.https.keyStorePassword"

keystore的密码。如果不指定,将使用默认的密码。同义于"javax.net.ssl.keyStorePassword" 系统变量。

"org.exolab.jms.net.https.keyStoreType"

keystore类型,如果不指定,使用默认的“JKS”。同义于"javax.net.ssl.keyStoreType" 系统变量。

"org.exolab.jms.net.https.trustStore"

truststore路径. 如果不指定,将使用默认的truststore. 同义于"javax.net.ssl.trustStore"系统变量。

"org.exolab.jms.net.https.trustStorePassword"

truststore的密码。如果不指定,将使用默认的密码。同义于"javax.net.ssl.trustStorePassword"系统变量。

"org.exolab.jms.net.https.trustStoreType"

truststore 类型,如果不指定,使用默认的“JKS”。同义于"javax.net.ssl.trustStoreType" 系统变量。

"org.exolab.jms.net.https.proxyHost"

指定代理服务器地址.同义于"https.proxyHost"系统变量.

"org.exolab.jms.net.https.proxyPort"

I指定代理服务主机端口. 同义于"https.proxyPort" 系统变量.

"org.exolab.jms.net.https.proxyUser"

指定登入代理服务器的用户名

"org.exolab.jms.net.https.proxyPassword"

指定登入代理服务器的密码

 

Embedded

 Hashtable properties = new Hashtable();
    properties.put(Context.INITIAL_CONTEXT_FACTORY, 
                   "org.exolab.jms.jndi.InitialContextFactory");
    properties.put(Context.PROVIDER_URL, "embedded://");
    Context context = new InitialContext(properties);



上面描述了如果使用这些连接器,那如何配置这些连接器呢?
OpenJMS的配置信息都在%OPEN_HOME%/config下得openjms.xml
下面我们描述下,如果

配置openjms.xml中的连接器

<Connectors>
<Connector scheme="tcp">
<ConnectionFactories>
<ConnectionFactory name="ConnectionFactory" />
</ConnectionFactories>
</Connector>
<Connector scheme="rmi">
<ConnectionFactories>
<QueueConnectionFactory name="JmsQueueConnectionFactory" />
<TopicConnectionFactory name="JmsTopicConnectionFactory" />
</ConnectionFactories>
</Connector>
</Connectors>



在openjms.xml中有一个Connectors节点,该节点下可以配置我们想要的连接器,可以配置多个。区分连接器主要通过scheme来配置各种类型,在ConnectionFactories配置相应的工厂类。

TCP

 <Connector scheme="tcp">
      <ConnectionFactories>
        <ConnectionFactory name="TCPConnectionFactory"/>
      </ConnectionFactories>
    </Connector>

TCPS

   <Connector scheme="tcps">
      <ConnectionFactories>
        <ConnectionFactory name="TCPSConnectionFactory"/>
      </ConnectionFactories>
    </Connector>

说明

因为要使用到keystore文件,大家可以学习下如何生成keystore文件,也可以使用openjms自带的,具体如何配置keystore文件,可以参阅官方文档: http://openjms.sourceforge.net/config/tcps.html

RMI

<Connector scheme="rmi">
      <ConnectionFactories>
        <ConnectionFactory name="RMIConnectionFactory"/>
      </ConnectionFactories>
    </Connector>

 说明

RMI我们还可以指定注册的主机信息。通过

 <RmiConfiguration embeddedRegistry="false"
                    registryHost="<registry-host>"
                    registryPort="<registry-port>">
  </RmiConfiguration>

来配置,host如果不指定默认为localhost,port不指定默认为1099.


HTTP

在以前的版本中OpenJMS是不提供Http通道的,后来增加了这个功能,不过需要额外的配置。
在%OPENJMS_HOME%/lib下有一个openjms-tunnel-0.7.7-beta-1.war(我的版本)。大家看开头和末尾。将这个war包发布到一个容器中。比如Tomcat,jboss等。我这边使用Tomcat。直接将war拷贝到tomcat的webapps下面。

运行tomcat。
然后在openjms.xml中配置http连接器。
 <Connector scheme="http">
      <ConnectionFactories>
        <ConnectionFactory name="HTTPConnectionFactory"/>
      </ConnectionFactories>
  </Connector>

说明

OpenJMS的http通道是通过容器来提供http服务,然后由容器中的http服务作为一个中转,连接上openjms的服务。

HTTPS

   <Connector scheme="https">
      <ConnectionFactories>
        <ConnectionFactory name="HTTPSConnectionFactory"/>
      </ConnectionFactories>
    </Connector>

说明

HTTPS的配置也比较复杂,需要导入keystore等信息。具体请参阅:http://openjms.sourceforge.net/config/https.html


Embedded 

<Connector scheme="embedded">
      <ConnectionFactories>
        <ConnectionFactory name="VMConnectionFactory"/>
      </ConnectionFactories>
    </Connector>

说明

embedde通道作用还是比较大的,如果在本地的一些操作,我们直接通过jvm通信,省掉了网络开销(学过网络的人应该知道,虽然在本地,其实还是要访问网卡,然后ip-mac-ip-路由,我们自己的ip算是一个环回口,从网卡走一圈又回来了)。


 类似资料: