我使用带有consul拓扑的swarm构建了一个with服务。该服务可用于多个“通道”,因此在启动时,我将每个通道的服务通告给拓扑,如下所示:
protected void startup(@Observes @Initialized(ApplicationScoped.class) Object ignore) {
for (Channel channel : activeChannels) {
// do some init stuff
Topology.lookup().advertise(buildUniqueName(channel.name()));
}
}这工作得很好,我可以在我的领事网络中看到每个服务都有正确的名称,id和检查。
但现在,当我停止服务器时,它会尝试自动取消注册每个服务几次(最多5次)。您可以看到在日志文件中滚动,然后服务器就挂起,异常开始滚动:
INFO [org.wildfly.swarm.topology.consul.runtime.Advertiser] (MSC service thread 1-2) Deregister service service-name:<ip-and-port>
INFO [org.wildfly.swarm.topology.consul.runtime.Advertiser] (MSC service thread 1-6) Deregister service service-name:<ip-and-port>
INFO [org.wildfly.swarm.topology.consul.runtime.Advertiser] (MSC service thread 1-4) Deregister service service-name:<ip-and-port>
INFO [org.wildfly.swarm.topology.consul.runtime.Advertiser] (MSC service thread 1-5) Deregister service service-name:<ip-and-port>
INFO [org.wildfly.swarm.topology.consul.runtime.Advertiser] (MSC service thread 1-1) Deregister service service-name:<ip-and-port>
ERROR [org.wildfly.swarm.topology] (Thread-26) WFSTOPO0002: Client not registered: [Registration: service-name; <ip-and-port>; [[http]]].: com.orbitz.consul.NotRegisteredException
at com.orbitz.consul.AgentClient.check(AgentClient.java:404)
at com.orbitz.consul.AgentClient.checkTtl(AgentClient.java:420)
at com.orbitz.consul.AgentClient.pass(AgentClient.java:427)
at org.wildfly.swarm.topology.consul.runtime.Advertiser.lambda$run$2(Advertiser.java:115)
at java.util.concurrent.ConcurrentHashMap$KeySpliterator.forEachRemaining(ConcurrentHashMap.java:3527)
at java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:580)
at org.wildfly.swarm.topology.consul.runtime.Advertiser.run(Advertiser.java:113)
at java.lang.Thread.run(Thread.java:748)这是可以理解的。然而,问题是服务器在之后没有完成关机过程。它就挂起来了。
这是wildfly-swarm中的一个bug,还是我必须使用不同的拓扑通告?
Wildfly swarm version 2017.5.0使用了分数拓扑--consul、jaxrs、cdi、jpa、logging、swagger war包,没有主类
https://stackoverflow.com/questions/44428692
复制相似问题