Qpid C++ 与 Java 互通 注意事项
Qpid 对Broker和Client API(以下简称Client)分别提供了C++和Java版本,由于C++和Java版本是独立实现的,存在一些差异,所以互通时也有一些注意事项。
先来看看有哪些差异:
- 实现的AMQP版本差异
- C++的Broker和Client实现了AMQP 0-10和1.0版本
- Java的Broker和Client实现了AMQP 0-8,0-9,0-10和1.0版本
- 程序结构差异
- Java Broker下可以有多个VirtualHost,而C++ Broker下没有VirtualHost的概念,相当于只有一个VirtualHost,即default VirtualHost;
- Java Broker下有多个Port,C++ Broker下没有Port的概念,相当于只有一个AMQP Port
- 管理方式差异
- C++ Broker的管理通过基于Qpid消息通信的QMF管理,提供多个基于Python API实现的命令行工具
- Java Broker通过MANAGEMENT-HTTP插件实现WEB式GUI管理界面
- 默认配置差异
- C++ Broker默认未开启认证,可以直接匿名连接,
- Java默认开启plain方式认证,连接需要用户名密码
- 其他实现差异
- 消息分组Java区分为Standard和Shared两种方式;C++仅实现Shared方式。
互通注意事项:
- 协议只能使用AMQP 0-10和1.0,这个可以通过自动协商事项,不需要关注;
- Java Client访问C++ Broker仅使用默认VirtualHost,不可指定;而C++ Client访问Java如不指定VirtualHost则访问默认VirtualHost,也可以通过Connection的open方法指定VirtualHost或者设置Connection的Option“virtualhost”来指定。
- 无法交叉管理,Java Broker没有实现QMF,无法用C++ Broker提供的命令行工具管理,C++ Broker也不支持WEB管理方式。
- Java Client中指定了用户名密码,C++ Broker设置为匿名访问是可以的;Java Broker设置了plain方式验证,C++ Client中需要指定用户名密码,可以使用Connection的open方法参数或者设置Option “username”和“password”;Java Broker可以通过管理工具将AMQP端口的验证方式修改为Anonymous来实现匿名方式;C++ Broker也可以开启用户验证来提升安全性;这些设置可以参考官方文档。
- Java客户端应用需要注意C++ Broker只实现了shared方式的消息分组。