1

我在 Windows Server 2008 R2 上运行Apollo 1.3时遇到问题。我正在从 Web 应用程序(使用 stomp-php 的 PHP)发送 STOMP 消息,然后使用作为 Windows 服务运行的应用程序对其进行处理。这在一段时间内可以正常工作,但出乎意料的是,在向 Apollo 推送消息时出现以下错误:“虚拟主机已停止”。

Apollo 仍在运行,我什至可以从 Web 界面访问虚拟主机。让它再次运行的唯一方法(到目前为止我发现)是停止服务删除代理数据文件夹中的所有内容并再次启动服务。简单地重新启动服务是行不通的。

这是来自 apollo.log 的片段:

| WARN  | DB operation failed. (entering recovery mode): java.io.FileNotFoundException: C:\apache-apollo-1.3\mybroker\data\dirty.index\MANIFEST-000004 (Das System kann die angegebene Datei nicht finden) | org.apache.activemq.apollo.broker.store.leveldb.LevelDBClient | leveldb store io write
...
| WARN  | Could not recover snapshot of the index: java.io.IOException: Der Prozess kann nicht auf die Datei zugreifen, da ein anderer Prozess einen Teil der Datei gesperrt hat | org.apache.activemq.apollo.broker.store.leveldb.LevelDBClient | leveldb store io write

这些是我能找到的唯一例外。

我认为这是一个配置错误而不是代码问题,但这里是相关的代码片段:

$stomp = new \FuseSource\Stomp\Stomp('tcp://127.0.0.1:61613');
$stomp->connect('admin', 'password');

$message = array():

$stomp->send('/queue/messages', json_encode($message));

我猜这是在虚拟主机处于非活动状态(即没有收到消息,没有连接)一段时间后触发的。因此,我正在考虑不时重新启动 apollo-broker 以防止触发它,但我不确定这是否真的是触发虚拟主机停止的原因。

谁能告诉我为什么虚拟主机突然停止以及我需要进行哪些配置更改以防止这种情况发生?我已经在文档中进行了搜索,但没有找到有关虚拟主机生命周期或类似内容的任何信息。

4

1 回答 1

2

鼓励 Apollo 1.3 的用户重新配置服务器以使用 BDB,因为这样更稳定。Apollo 甚至会在启动时记录一条消息,让您知道这一点:

Using the pure java LevelDB implementation which is still experimental. If 
the JNI version is not available for your platform, please switch to the BDB 
store instead.

现在,就在最近发布了 Apollo 1.5,支持 Windows 上的 JNI 版本的 leveldb。因此,如果您想升级到 1.5,那也应该可以解决问题。

于 2012-11-09T16:33:00.760 回答