发布于 2014-11-07 03:20:18 | 256 次阅读 | 评论: 0 | 来源: 网友投递
Apache Qpid 消息中间件
Qpid 是 Apache 开发的一款面向对象的消息中间件,它是一个 AMQP 的实现,可以和其他符合 AMQP 协议的系统进行通信。Qpid 提供了 C++/Python/Java/C# 等主流编程语言的客户端库,安装使用非常方便。相对于其他的 AMQP 实现,Qpid 社区十分活跃,有望成为标准 AMQP 中间件产品。除了符合 AMQP 基本要求之外,Qpid 提供了很多额外的 HA 特性,非常适于集群环境下的消息通信。
Qpid Proton 0.8 发布,此版本包括大量的 bug 修复,现已提供下载。更新内容请看发行说明:
Bug 修复
[PROTON-436] - pn_data_dump is broken for complex types
[PROTON-474] - Incorrect mapping of TTL to JMSExpiration in JMS InboundTransformer
[PROTON-516] - [proton-c] Dispatcher frame buffer set to peer's max frame size.
[PROTON-543] - Frame Parser error if input stream is read before SASL is initialized in the transport
[PROTON-576] - proton-j: codec support for UTF-8 encoding and decoding appears broken?
[PROTON-582] - Perl language bindings do not properly identify integers from strings when encoding
[PROTON-587] - Proton 0.7 fails to compile with Visual Studio 2008
[PROTON-590] - If Proton receives a frame with an unexpected performative number it will SEGV
[PROTON-592] - Python test function common _ready() fails on windows
[PROTON-593] - Scripts for running java examples contain old paths
[PROTON-595] - Python test function MessengerApp.start fails on Windows
[PROTON-596] - There is no equivalent to 'config.sh' for windows
[PROTON-602] - Syntax error in perl bindings Data.pm for perl 10.5.1
[PROTON-603] - Python testReclaimCredit fails on Windows
[PROTON-604] - Unable to display usage information for perl example send.pl
[PROTON-606] - Python testReclaimCredit exposes test server messenger hang on windows
[PROTON-607] - Perl recv.pl shows error if a message has no subject
[PROTON-608] - seg fault if attach is sent before open and begin
[PROTON-610] - proton-c: messenger doesn't honour an advertised remote idle timeout
[PROTON-611] - [proton-c] transport buffer increased to peer's max frame size if initial output_size is not enough
[PROTON-615] - Cmake binding dependencies wrong (building python binding always; no dependency for include/proton/cproton.i)
[PROTON-616] - Use Symbol keys in message annotations
[PROTON-617] - Proton map/hash entries can disappear
[PROTON-618] - [proton-j] some of the .java source files have crlf line endings, most dont
[PROTON-619] - The heuristics in config.sh don't work for all build directory locations
[PROTON-624] - Corrupted payload with redelivered messages when transformer is jms
[PROTON-625] - prevert looping when map->load_factor exactly equals load
[PROTON-627] - Use Symbol keys in delivery annotations
[PROTON-631] - Potential null pointer exception if 'x-opt-jms-type' annotation is present but has a null value.
[PROTON-641] - pn_connection_t leaked when links not closed
[PROTON-646] - Perl message does not have the correct type when the body is a boolean with a FALSE value
[PROTON-648] - Memory leaks on aborted connections.
[PROTON-655] - URL parser fails to parse ActiveMQ dynamically generated address
[PROTON-656] - pn_transport_close_{head, tail} no longer return an error code on framing error.
[PROTON-660] - Fix openssl.c build on windows
[PROTON-661] - pn_message_save_* do not return correct message size when PN_OVERFLOW
[PROTON-666] - TransactionalState applied to indicate the txn-id before sending has no effect on the outgoing transfer frames
[PROTON-669] - proton-c: Messenger abstracts away connections, but it would be useful to fail fast for auth errors etc.
[PROTON-670] - proton-c: Messenger doesn't provide accessors for the links it is using
[PROTON-671] - proton-c: Messenger doesn't provide a way to set the link settlement modes it uses
[PROTON-672] - proton-c: Messenger doesn't support setting the transport tracer
[PROTON-673] - proton-c: Messenger doesn't provide a way to obtain the remote idle timeout
[PROTON-674] - proton-c: Messenger doesn't provide a way of setting the TTL on a subscription
[PROTON-675] - proton-c: Messenger doesn't provide a way of setting the SSL peer authentication mode
[PROTON-676] - proton-c: transport layer SSL failures not propagated back to Messenger in pni_connection_readable
[PROTON-677] - proton-c: transport incorrectly detaches all links with closed=true by default
[PROTON-679] - proton-c: add a "manual" link credit mode to Messenger
[PROTON-680] - proton-c: Messenger doesn't provide a way of obtaining link or delivery information
[PROTON-684] - Restrict IOCP enlistment to pn_selector_t usage scenarios in Windows
[PROTON-685] - calling free() on session with multiple Sender or Receiver links leads to ConcurrentModificationException
[PROTON-686] - va_copy is C99 (not C89) and is not supported by the Microsoft Visual Studio C compiler before VS 2013
[PROTON-687] - Memory corruption in proton-test
[PROTON-688] - pn_transport_unbind() doesn't reset all relevant trasnport state
[PROTON-689] - Python binding does not expose transport error details
[PROTON-690] - Fix Windows components for new Proton object/class refcounting mechanisms
[PROTON-694] - splitting contrib/JMSMappingOutboundTransformer's encoding and transformation
[PROTON-695] - New URL code causing invalid reads/writes according to valgrind
[PROTON-698] - ClassCastException occurs when testing equality of Binary instance against a different type of Object
[PROTON-699] - Messenger installed examples send,recv do not compile
[PROTON-701] - Windows ctest fixes for proton-c
[PROTON-702] - Windows proton-c selector can forget timer events
[PROTON-704] - delivery-count is set incorrectly during outbound transformation
[PROTON-706] - CMake fails - get_filename_component unknown component DIRECTORY
[PROTON-708] - C proton driver needs a getter function to access the pn_error so it can be cleared
[PROTON-709] - [proton-c] Windows 64-bit transport issue
[PROTON-712] - Seg fault due to missing NULL return value check of getprotobyname
[PROTON-714] - SSL buffer overflow with large frames
[PROTON-715] - [contrib/proton-jms] delivery-count is set incorrectly during Native outbound transformation
[PROTON-716] - Reject SSL clients that attempt to use SSLv3
[PROTON-717] - Disable SSL compression
[PROTON-718] - disable SSL v3 for proton-j
[PROTON-719] - Disable SSL v3 for Windows SChannel
[PROTON-720] - [Windows IO] Prints warning string as %d
[PROTON-724] - pn_transport_close_head doesn't generate the expected PN_TRANSPORT_HEAD_CLOSED event
[PROTON-725] - pni_parse_url does not properly handle Base64 in URL
[PROTON-728] - transport aborts when delivery ids are out of sequence
改进
[PROTON-429] - pn_bytes(size_t size, char *start) needs a const on the 'start' argument
[PROTON-465] - FindPerlLibs.cmake module in Proton behaves differently to Qpid's Perl detection
[PROTON-558] - Make friendly protocol field logging optional for low-memory devices
[PROTON-583] - Can move a bunch of things from .data to .rodata by adding const
[PROTON-585] - Can improve memory use by rearranging structs to eliminate padding
[PROTON-591] - There are two large, mostly empty tables used for dispatching incoming frames
[PROTON-597] - Improve the memory footprint of TrasportImpl
[PROTON-613] - update java messenger 'send' example behaviour to be more in line with the other language examples
[PROTON-620] - Remove unnecessary wrapped types from proton low level bindings
[PROTON-628] - split out usage of the buffer in MessageImpl#decode() to its own method
[PROTON-640] - IO completion port Windows IO for Proton
[PROTON-642] - SASL Servers need to be able to optionally handle clients that don't use SASL
[PROTON-647] - Implement an Event.copy or clone method
[PROTON-650] - proton-dump should include a man page
[PROTON-653] - Expose the version and build details for Proton in the Perl bindings.
[PROTON-657] - OSX: build proton with homebrew openssl
[PROTON-664] - add pom profile to allow creating souces jar during non-release builds.
[PROTON-668] - Document Proton-c IO restrictions for 0.8 release
[PROTON-693] - Python Url class to wrap C function pni_parse_url
[PROTON-705] - Windows: Allow C based tests to run directly from ctest/Visual Studio without having to set up environment
[PROTON-711] - [contrib/proton-jms] add support to message transformers for more efficient destination type annotation value
新特性
[PROTON-581] - SSL/TLS support for Proton-c on Windows
[PROTON-630] - [python] Add a setup.py for installing the python bindings via PyPi
[PROTON-651] - Export the proton version numbers via the bindings.
Apache Qpid (Open Source AMQP Messaging) 是一个跨平台的企业通讯解决方案,实现了高级消息队列协议。提供了 Java、C++ 两种服务端版本以及 Java、C++、.NET、Python和Ruby语言的客户端。
其中C++版本的服务器端具备高性能/低消耗以及RDMA支持,可运行于Windows/Linux和Solaris平台;而Java版本的服务器则支持JMS,以及各种平台。
关于RDMA的相关知识:
RDMA(Remote Direct Memory Access)是通过网络把资料直接传入某台计算机的一块存储区域,不需用到多少计算机的处理功能。普通网卡集成了支持硬件校验和的功能,并对软件进行了 改进,从而减少了发送数据的拷贝量,但无法减少接收数据的拷贝量,而这部分拷贝量要占用处理器的大量计算周期。普通网卡的工作过程如下:先把收到的数据包 缓存到系统上,数据包经过处理后,相应数据被分配到一个TCP连接。下一步,接收系统再把主动提供的TCP数据同相应的应用程序联系起来,并将数据从系统 缓冲区拷贝到目标存储地址。以太网已能满足高性能应用对网络吞吐率的要求,具备高吞吐率和成本优势,以太网技术要跟高性能网络应用挂钩,主要解决的问题是 应用吞吐率。通常情况下,系统持续在主机CPU中处理以太网通信需要占用CPU资源。CPU速率会制约网络数据率;持续处理这类通信会导致CPU性能降 级;对多端口千兆位或单端口10千兆位以太网,这类问题会变得更为严重