问题
Following instructions in ribbon-consul example I started consul with
consul agent -dev
then in parent folder of this example
mvn verify -Pconsul -Dswarm.consul.url=http://localhost:8500
From what I gather this is the default location of consul, so I also ran it without, only to have the same result. Task eventually starts all services, however fails to register with consul, with output:
2017-08-25 16:54:00,324 INFO [org.wildfly.swarm.runtime.deployer] (main) deploying time.war
2017-08-25 16:54:00,354 INFO [org.jboss.as.server.deployment] (MSC service thread 1-8) WFLYSRV0027: Starting deployment of "time.war" (runtime-name: "time.war")
2017-08-25 16:54:01,778 WARN [org.jboss.as.dependency.private] (MSC service thread 1-3) WFLYSRV0018: Deployment "deployment.time.war" is using a private module ("io.netty:main") which may be changed or removed in future versions without notice.
2017-08-25 16:54:01,923 INFO [org.wildfly.extension.undertow] (MSC service thread 1-2) WFLYUT0018: Host default-host starting
2017-08-25 16:54:02,036 ERROR [org.jboss.msc.service.fail] (MSC service thread 1-6) MSC000001: Failed to start service swarm.topology.register.time.http: org.jboss.msc.service.StartException in service swarm.topology.register.time.http: com.orbitz.consul.ConsulException: Invalid service address
at org.wildfly.swarm.topology.deployment.RegistrationAdvertiser.start(RegistrationAdvertiser.java:79)
at org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1948)
at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1881)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:748)
Caused by: com.orbitz.consul.ConsulException: Invalid service address
at com.orbitz.consul.AgentClient.register(AgentClient.java:180)
at com.orbitz.consul.AgentClient.register(AgentClient.java:184)
at org.wildfly.swarm.topology.consul.runtime.Advertiser.advertise(Advertiser.java:65)
at org.wildfly.swarm.topology.consul.runtime.ConsulTopologyConnector.advertise(ConsulTopologyConnector.java:60)
at org.wildfly.swarm.topology.deployment.RegistrationAdvertiser.start(RegistrationAdvertiser.java:77)
... 5 more
2017-08-25 16:54:02,203 INFO [org.jboss.resteasy.resteasy_jaxrs.i18n] (ServerService Thread Pool -- 7) RESTEASY002225: Deploying javax.ws.rs.core.Application: class org.wildfly.swarm.generated.WildFlySwarmDefaultJAXRSApplication
2017-08-25 16:54:02,221 INFO [org.wildfly.extension.undertow] (ServerService Thread Pool -- 7) WFLYUT0021: Registered web context: /
2017-08-25 16:54:02,242 ERROR [org.jboss.as.controller.management-operation] (main) WFLYCTL0013: Operation ("add") failed - address: (("deployment" => "time.war")) - failure description: {
"WFLYCTL0080: Failed services" => {"swarm.topology.register.time.http" => "org.jboss.msc.service.StartException in service swarm.topology.register.time.http: com.orbitz.consul.ConsulException: Invalid service address
Caused by: com.orbitz.consul.ConsulException: Invalid service address"},
"WFLYCTL0412: Required services that are not installed:" => ["swarm.topology.register.time.http"],
"WFLYCTL0180: Services with missing/unavailable dependencies" => undefined
}
2017-08-25 16:54:02,244 ERROR [org.jboss.as.server] (main) WFLYSRV0021: Deploy of deployment "time.war" was rolled back with the following failure message:
{
"WFLYCTL0080: Failed services" => {"swarm.topology.register.time.http" => "org.jboss.msc.service.StartException in service swarm.topology.register.time.http: com.orbitz.consul.ConsulException: Invalid service address
Caused by: com.orbitz.consul.ConsulException: Invalid service address"},
"WFLYCTL0412: Required services that are not installed:" => ["swarm.topology.register.time.http"],
"WFLYCTL0180: Services with missing/unavailable dependencies" => undefined
}
2017-08-25 16:54:02,250 INFO [org.wildfly.extension.undertow] (ServerService Thread Pool -- 7) WFLYUT0022: Unregistered web context: /
2017-08-25 16:54:02,254 INFO [org.wildfly.extension.undertow] (MSC service thread 1-2) WFLYUT0019: Host default-host stopping
2017-08-25 16:54:02,272 INFO [org.jboss.as.server.deployment] (MSC service thread 1-7) WFLYSRV0028: Stopped deployment time.war (runtime-name: time.war) in 28ms
2017-08-25 16:54:02,273 INFO [org.jboss.as.controller] (main) WFLYCTL0183: Service status report
WFLYCTL0186: Services which failed to start: service swarm.topology.register.time.http
2017-08-25 16:54:02,275 ERROR [stderr] (main) Exception in thread "main" java.lang.reflect.InvocationTargetException
2017-08-25 16:54:02,275 ERROR [stderr] (main) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
2017-08-25 16:54:02,275 ERROR [stderr] (main) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
2017-08-25 16:54:02,275 ERROR [stderr] (main) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
2017-08-25 16:54:02,275 ERROR [stderr] (main) at java.lang.reflect.Method.invoke(Method.java:498)
2017-08-25 16:54:02,275 ERROR [stderr] (main) at org.wildfly.swarm.bootstrap.MainInvoker.invoke(MainInvoker.java:39)
2017-08-25 16:54:02,276 ERROR [stderr] (main) at org.wildfly.swarm.bootstrap.MainInvoker.main(MainInvoker.java:92)
2017-08-25 16:54:02,276 ERROR [stderr] (main) Caused by: org.wildfly.swarm.container.DeploymentException: org.wildfly.swarm.container.DeploymentException: WFSWARM0004: Deployment failed: {"WFLYCTL0080: Failed services" => {"swarm.topology.register.time.http" => "org.jboss.msc.service.StartException in service swarm.topology.register.time.http: com.orbitz.consul.ConsulException: Invalid service address
2017-08-25 16:54:02,276 ERROR [stderr] (main) Caused by: com.orbitz.consul.ConsulException: Invalid service address"},"WFLYCTL0412: Required services that are not installed:" => ["swarm.topology.register.time.http"],"WFLYCTL0180: Services with missing/unavailable dependencies" => undefined}
2017-08-25 16:54:02,276 ERROR [stderr] (main) at org.wildfly.swarm.container.runtime.RuntimeDeployer.deploy(RuntimeDeployer.java:301)
2017-08-25 16:54:02,276 ERROR [stderr] (main) at org.wildfly.swarm.container.runtime.RuntimeDeployer.deploy(RuntimeDeployer.java:174)
2017-08-25 16:54:02,276 ERROR [stderr] (main) at org.wildfly.swarm.container.runtime.RuntimeDeployer$Proxy$_$$_WeldClientProxy.deploy(Unknown Source)
2017-08-25 16:54:02,277 ERROR [stderr] (main) at org.wildfly.swarm.Swarm.deploy(Swarm.java:467)
2017-08-25 16:54:02,277 ERROR [stderr] (main) at org.wildfly.swarm.examples.netflix.ribbon.time.Main.main(Main.java:19)
2017-08-25 16:54:02,277 ERROR [stderr] (main) ... 6 more
2017-08-25 16:54:02,278 ERROR [stderr] (main) Caused by: org.wildfly.swarm.container.DeploymentException: WFSWARM0004: Deployment failed: {"WFLYCTL0080: Failed services" => {"swarm.topology.register.time.http" => "org.jboss.msc.service.StartException in service swarm.topology.register.time.http: com.orbitz.consul.ConsulException: Invalid service address
2017-08-25 16:54:02,278 ERROR [stderr] (main) Caused by: com.orbitz.consul.ConsulException: Invalid service address"},"WFLYCTL0412: Required services that are not installed:" => ["swarm.topology.register.time.http"],"WFLYCTL0180: Services with missing/unavailable dependencies" => undefined}
2017-08-25 16:54:02,278 ERROR [stderr] (main) at org.wildfly.swarm.container.runtime.RuntimeDeployer.deploy(RuntimeDeployer.java:296)
2017-08-25 16:54:02,278 ERROR [stderr] (main) ... 10 more
This is repeated for every time and event service started. Frontend reports consul service at http://:8300
.
Starting main methods from idea with offset will perform fine (tho frontend returns 403:forbidden, but that is an another issue)
Is there something I am missing, because this seems like a pretty simple example to be bugged?
Versions of examples affected are 2017.9.0-SNAPSHOT
and 2017.8.1
.
回答1:
Consul client exception "Invalid service address" indicates that service is being registered with IP "0.0.0.0". See consul source code
By default, Swarm has default value "0.0.0.0" for "swarm.bind.address" property, which means accepting connections for “all interfaces” to Swarm. It seems that this IP is being used to register service to consul.
Try to specify swarm.bind.address system property in test/pom.xml for every process e.g.
<process>
<artifactId>example-ribbon-consul-time</artifactId>
<properties>
<swarm.http.port>8081</swarm.http.port>
<swarm.bind.address>127.0.0.1</swarm.bind.address>
</properties>
</process>
来源:https://stackoverflow.com/questions/45884539/unable-to-locate-consul-service-with-wildfly-swarm-instance-from-wildfly-swarm-e