最近一直在关注一些文件传输中间件的实现,想用ActiveMQ实现一些具体的功能。经过几周的ActiveMQ的学习,以及中间件必须一些功能。发现一些问题自己还是不能搞懂,希望网上一些,大牛拍一下砖,支持一下。
1.在消息中间件的消息的路由的算法怎么实现的。
如A、B、C、D、E 五个节点上都是提供消息服务的 AMQ ,五个节点连通成一个网络,连接到 A 节点的客户端可以发消息到五个节点中的任意一个节点,AMQ 会自动寻找一条最佳路径传递消息到目标节点。如从A 发消息到D,有两条连通路径:A->B->C->D 和A->E->D,其中 A->E->D 经过的节点最少,该路径为最佳路径, AMQ 将根据此路径对消息进行传递。
2.在消息中间件中消息的存储最好采用哪种,各自的优缺点是什么,商用的消息中间件采用推荐采用哪种消息存储?
目前消息的存储有基于文件系统,基于内存,基于数据库的。
基于文件系统:
以文件方式保存消息,配置非常简单并具有较高的性能,但是可靠性比较差。在可靠性要求不高但对性能要求很高的环境下可以使用这种消息存储方式。
基于数据库:
使用关系数据库保存消息。对可靠性要求很高的应用环境下建议使用这种消息存储方式。jdbc消息存储方式的缺点是配置较复杂。
基于内存:
将消息保存在内存中,可靠性比较差,性能比较高,当消息生产者快速生产和消息消息者消费慢时候,消息堆积造成对内存占用严重,造成宕机等,当重新启动时候,内存的尚未消息的消息消失,不可靠。
3. 超大文件的文件传输断点续传
1.基于单队列实现,消息生产者产生消息发送给客户端然后处于消息等待状态,客户段接受消息成功之后,发送消息给消息生产者,消息生产者再开始发送消息给消息的消费者直到整个文件发送成功,然后消息客户端将消息合并成一个文件。
2.基于多线程的实现,在发送消息时候,消息生产者创建多个线程,分别发送消息客户端,客户端接受消息并签收,如果客户端接受失败(备注这里失败,仅指消息没有签收),发送消息给消息生产者一个特定队列发送消息请求重新继续发送。
4.提供可扩展的消息中间实现便于消息中间件的替换。
如目前采用ActiveMQ实现,以后可以替换为其他的消息中间件,如Hornetq等。
5.针对各种消息服务和消息相关的监控(Brige,Connection,Queue)的状态和数量的实时监控等。
主要采用JMX实现底层的监控功能。针对ActiveMQ提供JMX的MBean可以直接实现。
6.针对目前消息中间件在某些情况下,比较消耗内存,必须监控实时监控流量。
具体实现思路没有想出来,针对,ActiveMQ可以使用SysUsage,StoreUage等,但是其他的MQ,但是针对其他的MQ怎么将空。