2017-06-19 150 views
0

我是ActiveMQ技术的新用户,并且我遇到了一些接近此技术的问题。ActiveMq:持久队列和离线系统

我有以下情况:

  1. 我有SW,在嵌入式(离线)ARM设备上运行,在运行时间upluggable硬盘上存档的一组视频。
  2. 有时(每天4-5个事件),我必须将警报事件关联到这些视频,并将警报排队在持续队列中。
  3. 每月一次,我们要提取的硬盘,并连接到另一台嵌入式在线 ARM设备,应当通知有关由离线ARM设备产生的告警一的ActiveMQ服务器

而且现在我的问题是:如何将持久队列存储在硬盘上,以便脱机ARM设备生成的事件可供在线ARM系统使用(联机与脱机嵌入设备之间的唯一“连接”是硬盘)?

请注意,我无法更改将消息传输到在线服务器的方式,因为它是我公司未开发的系统。

问候

乔瓦尼

回答

1

这听起来像你想“存储 - 转发”消息模式。您可以配置“离线”ActiveMQ代理以尝试连接到“在线”ActiveMQ代理。网络连接器将尝试以可配置的时间间隔进行连接,当它“在线”时,它将自动开始发送消息。

轻微的缺点是代理会尝试连接到远程代理(即使在脱机时),因此您需要管理日志轮转或日志记录级别以适应。

查找静态://网络连接器URI

Network of brokers

+0

马特嗨,我想我明白了建议的方法。 使用静态连接器,如果主板A离线2天,并且第三天连接到运行“服务器”的主机C,则排队的消息将正常传送。 但我有一个怀疑与我的系统有关:设备A处于脱机状态并生成消息;硬盘每周一次与A断开并连接到B,这是一块具有相同SW的A板,但连接到ActiveMq服务器代理。 我不明白如何让主板A上的ActiveMq生成的消息通过主板B传送到服务器C. – Giox79

+0

如果ActiveMQ kahadb文件的存储位置在所有主板上都在同一目录中,并且ActiveMQ版本为同样的:B板上的SW应该启动代理,从A读取存储在硬盘驱动器上的消息,然后交付给服务器C。 –

+0

另一种选择可能是采取补偿事务或文件系统作为队列方法。将文件存储在一个文件夹中,让进程检测连接存储的时间(文件系统监视器或cron作业),然后在连接测试通过时将消息发布到服务器C上的代理。 –