Chrishan
Chrishan

Reputation: 4106

Restart server on node failure with Consul

Newbie to Microservices here.

I have been looking into develop a microservice with spring actuator while having Consul for service discovery and fail recovery. I have configured a cluster as explained in Consul documentation.

Now what I'm trying to do is configure a Consul Watch to trigger when any of my service is down and execute a shell script to restart my service. Following is my configuration file.

{
 "bind_addr": "127.0.0.1",
 "datacenter": "dc1",
 "encrypt": "EXz7LsrhpQ4idwqffiFoQ==",
 "data_dir": "/data",
 "log_level": "INFO",
 "enable_syslog": true,
 "enable_debug": true,
 "enable_script_checks": true,
 "ui":true,
 "node_name": "SpringConsulClient",
 "server": false,
 "service": { "name": "Apache", "tags": ["HTTP"], "port": 8080,
   "check": {"script": "curl localhost >/dev/null 2>&1", "interval": "10s"}},
 "rejoin_after_leave": true,
 "watches": [
    {
      "type": "service",
      "handler": "/Consul-Script.sh"
    }
  ]
 } 

Any help/tip would be greatly appreciate.

Regards, Chrishan

Upvotes: 0

Views: 1447

Answers (1)

Stanislav
Stanislav

Reputation: 28106

Take a closer look at the description of the service watch type in the official documentation. It has an example, how you can specify it:

{
  "type": "service",
  "service": "redis",
  "args": ["/usr/bin/my-service-handler.sh", "-redis"]
}

Note that it has no property handler and but takes a path to the script as an argument. And one more:

It requires the "service" parameter

It seems, in you case you need to specify it as follows:

"watches": [
    {
      "type": "service",
      "service": "Apache",
      "args": ["/fully/qualified/path/to/Consul-Script.sh"]
    }
  ]

Upvotes: 1

Related Questions