ActiveMQ学习笔记(三)——客户端应用开发

一、客户端开发

可以根据实际情况选择合适的协议,默认协议是OpenWire,通用协议(如果未来可能用其它消息队列组件替换ActiveMQ)可以考虑MQTT、AMQP等协议。

  • Java开发

经典版安装包解压缩后,/examples目录下有各个协议的范例代码可以参考。

  • .Net开发

Apache官方提供了.Net的组件库,叫做NMS Clients,由API接口(Apache.NMS.dll)和Provider组成,每个协议一个Provider(dll文件),所以只要下载这两个组件使用即可,/examples目录下也有对应的范例。

但官方没有提供MQTT的Provider,也没有范例代码。可通过NuGet上搜索MQTT来获取第三方dll完成开发,如M2Mqtt.Net。

  • Web开发

可通过websocket技术实现消息收发;

经典版的MQTT、STOMP都支持websocket,但需要单独配置一个TransportConnector,单独的端口,/examples目录下有对应的范例代码;

Artemis的MQTT、STOMP、AMQP都支持WebSocket,而且不需要单独配置Acceptor,不另开端口。

 

二、SSL/TLS支持

经典版和Artemis都支持TLS1.2,基本步骤(单向认证为例):

  • 在服务端创建密钥对,并导出证书供客户端使用
keytool -genkey -alias broker -keyalg RSA -keystore broker.ks

keytool -export -alias broker -keystore broker.ks -file broker_cert
  • 配置ActiveMQ加入SSL支持

经典版

在conf/activemq.xml的broker节点下增加sslContext配置

<sslContext>

<sslContext keyStore="file:${activemq.base}/conf/broker.ks" keyStorePassword="123456"/>

<!--如果是双向认证,还需要配置trustStore 和trustStorePassword 属性-->

</sslContext>

配置transportConnector,协议头加上“+ssl”即可,openwire是例外,直接用ssl即可。

Artemis

编辑<实例>/etc/broker.xml的<acceptor>节点,在末尾增加如下URL参数:

sslEnabled=true;keyStorePath=./broker.ks;keyStorePassword=123456
  • 客户端

Java

导入服务端证书为KeyStore

keytool -import -alias broker -keystore client.ts -file broker_cert

改用合适的SslConnectionFactory并设置KeyStore和密码,例如:

ActiveMQSslConnectionFactory _sslConnFactory = new ActiveMQSslConnectionFactory("ssl://xxx.yyy.com:61616");//一定要用域名,可借助host文件
_sslConnFactory.setTrustStore("F:\\Java\\MqDemo\\client.ts");
_sslConnFactory.setTrustStorePassword("123456");

.Net

.Net直接使用服务端导出的证书文件即可,如果是NMS Clients,只需要修改连接URI,加上相关参数即可

ssl://xxx.yyy.com:61616?transport.SslProtocol=Tls12&transport.ClientCertFilename=broker_cert&transport.AcceptInvalidBrokerCert=true

如果用的是M2Mqtt.Net,调整构造函数参数和增加回调函数即可。

String certFile = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "broker_cert");
mqtt = new MqttClient(_hostname, _port, true, new X509Certificate(certFile), null, 
     MqttSslProtocols.TLSv1_2, new emoteCertificateValidationCallback(caValidCallback));

 

 

 

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值