我正在尝试编写一个模拟"经纪人下行"阶段的测试.所以我想
根据http://activemq.apache.org/how-do-i-restart-embedded-broker.html,建议初始化一个新的BrokerService以再次启动代理.所以代码看起来(几乎)像这样:
private BrokerService _broker;
private void startBroker() throws Exception {
_broker = new BrokerService();
_broker.addConnector("vm://localhost?broker.persistent=false");
_broker.start();
_broker.waitUntilStarted();
}
private void stopBroker() throws Exception {
_broker.stop();
_broker.waitUntilStopped();
}
@Test
public void publishMessagesWithServerBreakdownInBetween()
throws Exception
{
startBroker();
... send and receive message (works fine)
stopBroker();
... send message (fails of course)
startBroker(); // this fails with java.io.IOException: VMTransportServer already bound at: vm://localhost?broker.persistent=false
... send and receive message
}
Run Code Online (Sandbox Code Playgroud)
代码中的注释已经提到了这个问题:由于错误导致代理重启失败:java.io.IOException:VMTransportServer已经绑定在:vm:// localhost?broker.persistent = …
在哪里可以找到名为“SQL Server”的标准 ODBC 驱动程序 (SQLSRV32.dll) 与哪些 SQL Server 版本兼容的信息?
当然它可以与 Microsoft SQL Server 2008 R2 一起使用,因为我们正在成功使用它们。
但下面的情况又如何呢?
不幸的是,我在几个小时后无法使用我最喜欢的网络搜索引擎找到该信息。https://learn.microsoft.com/en-us/sql/connect/odbc/windows/microsoft-odbc-driver-for-sql-server-on-windows上 有可以下载的较新驱动程序的说明,但我们没有管理员权限来安装其中之一。我们必须使用 Windows 上开箱即用安装的标准 ODBC 驱动程序,因为该应用程序应该在客户的台式 PC 上运行。
可能此信息还取决于 DLL 的版本。我们以版本 10.00.15063.00 为例,但由于上述原因,它可能会有所不同。我们并不确切知道客户使用哪个 Windows 版本。可以是[Win7、Win8、Win10]/[家庭/专业/企业]。
我们使用ActiveMQ 5.8.0通过TCP将我们的Java应用程序连接到另一个系统.请求/回复(与回复临时队列同步)与我们的客户及其相应部分一起正常工作.
但我们不确定如何处理"异常"情况,例如短暂的网络故障.我们正在测试应用程序是否可以在套接字重新连接后继续正常工作.
但直到现在我们无法管理,因为客户端似乎没有按预期自动重新连接到代理.我们考虑过在自己的TransportListener中自己实现它,但不建议这样做(请参阅传输侦听器和ActiveMq重启,其中ActiveMQ成员Tim Bish提示使用故障转移协议).但故障转移只是设法切换到另一个经纪人,如果一个人失败,对吧?
目前,我们仅使用TransportListener来监视日志文件中的连接状态,这会导致一些日志条目如下面或类似(在下面的长日志中发布).
ActiveMQ连接执行程序:...生产者收到:java.net.SocketException:...
class ConnectionStateMonitor
implements TransportListener
{
@Override
public void onCommand(Object command)
{
logInfo("Producer received: " + command);
}
@Override
public void onException(IOException exception)
{
logError("Producer received: " + exception);
}
@Override
public void transportInterupted()
{
logError("Producer received transport interuption.");
}
@Override
public void transportResumed()
{
logInfo("Producer received transport resumption.");
}
}
Run Code Online (Sandbox Code Playgroud)
对不起,发布下面有堆栈跟踪的长日志摘录,但也许有人会立即看到丢失的内容.
我们目前正在使用以下设置:
任何想法如何解决这个问题(以及如何格式化下面的日志)?
提前致谢!
2013-06-05 14:09:21,676 | main | Signal | DEBUG |等待60000 2013-06-05 14:09:30,279 | ActiveMQ …