{"id":8677,"date":"2021-01-24T20:18:44","date_gmt":"2021-01-24T20:18:44","guid":{"rendered":"http:\/\/putridparrot.com\/blog\/?p=8677"},"modified":"2021-01-24T20:18:44","modified_gmt":"2021-01-24T20:18:44","slug":"interacting-with-eureka-via-its-rest-operations","status":"publish","type":"post","link":"https:\/\/putridparrot.com\/blog\/interacting-with-eureka-via-its-rest-operations\/","title":{"rendered":"Interacting with Eureka via it&#8217;s REST operations"},"content":{"rendered":"<p>In previous posts we&#8217;ve used Steeltoe to interact with Eureka. Obviously Steeltoe gives us good patterns for interacting with Eureka but also has the capability to work with other service discovery registries etc.<\/p>\n<p>Steeltoe&#8217;s great, but what if we wanted to just write our own Eureka either for learning how things work or maybe we just want to write our own for .NET or for another language\/technology?<\/p>\n<p>Eureka exposes REST operations for everything you&#8217;ll need to do with a service registry, let&#8217;s take a look.<\/p>\n<p><em>Note: I&#8217;ll give examples using localhost, obviously change to your Eureka host\/ip and I&#8217;ll also show data based upon the weatherapi we&#8217;ve worked on previously.<\/em><\/p>\n<p><strong>Query for all applications and their instances<\/strong><\/p>\n<ul>\n<li>GET method:\n<pre class=\"brush: plain; title: ; notranslate\" title=\"\">\r\nhttp:\/\/localhost:8761\/eureka\/apps\r\n<\/pre>\n<\/li>\n<li>Response:\n<pre class=\"brush: plain; title: ; notranslate\" title=\"\">\r\n&lt;applications&gt;\r\n  &lt;versions__delta&gt;1&lt;\/versions__delta&gt;\r\n  &lt;apps__hashcode&gt;UP_1_&lt;\/apps__hashcode&gt;\r\n  &lt;application&gt;\r\n    &lt;name&gt;WEATHERAPI&lt;\/name&gt;\r\n    &lt;instance&gt;\r\n      &lt;instanceId&gt;localhost:weatherapi:5001&lt;\/instanceId&gt;\r\n      &lt;hostName&gt;localhost&lt;\/hostName&gt;\r\n      &lt;app&gt;WEATHERAPI&lt;\/app&gt;\r\n      &lt;ipAddr&gt;localhost&lt;\/ipAddr&gt;\r\n      &lt;status&gt;UP&lt;\/status&gt;\r\n      &lt;overriddenstatus&gt;UNKNOWN&lt;\/overriddenstatus&gt;\r\n      &lt;port enabled=&quot;false&quot;&gt;8080&lt;\/port&gt;\r\n      &lt;securePort enabled=&quot;true&quot;&gt;5001&lt;\/securePort&gt;\r\n      &lt;countryId&gt;1&lt;\/countryId&gt;\r\n      &lt;dataCenterInfo class=&quot;com.netflix.appinfo.InstanceInfo$DefaultDataCenterInfo&quot;&gt;\r\n        &lt;name&gt;MyOwn&lt;\/name&gt;\r\n      &lt;\/dataCenterInfo&gt;\r\n      &lt;leaseInfo&gt;\r\n        &lt;renewalIntervalInSecs&gt;30&lt;\/renewalIntervalInSecs&gt;\r\n        &lt;durationInSecs&gt;90&lt;\/durationInSecs&gt;\r\n        &lt;registrationTimestamp&gt;1611512017058&lt;\/registrationTimestamp&gt;\r\n        &lt;lastRenewalTimestamp&gt;1611515916921&lt;\/lastRenewalTimestamp&gt;\r\n        &lt;evictionTimestamp&gt;0&lt;\/evictionTimestamp&gt;\r\n        &lt;serviceUpTimestamp&gt;1611512016403&lt;\/serviceUpTimestamp&gt;\r\n      &lt;\/leaseInfo&gt;\r\n      &lt;metadata class=&quot;java.util.Collections$EmptyMap&quot;\/&gt;\r\n      &lt;homePageUrl&gt;https:\/\/localhost:5001\/&lt;\/homePageUrl&gt;\r\n      &lt;statusPageUrl&gt;https:\/\/localhost:5001\/actuator\/info&lt;\/statusPageUrl&gt;\r\n      &lt;healthCheckUrl&gt;https:\/\/localhost:5001\/actuator\/health&lt;\/healthCheckUrl&gt;\r\n      &lt;vipAddress&gt;weatherapi&lt;\/vipAddress&gt;\r\n      &lt;secureVipAddress&gt;weatherapi&lt;\/secureVipAddress&gt;\r\n      &lt;isCoordinatingDiscoveryServer&gt;false&lt;\/isCoordinatingDiscoveryServer&gt;\r\n      &lt;lastUpdatedTimestamp&gt;1611512017058&lt;\/lastUpdatedTimestamp&gt;\r\n      &lt;lastDirtyTimestamp&gt;1611512016217&lt;\/lastDirtyTimestamp&gt;\r\n      &lt;actionType&gt;ADDED&lt;\/actionType&gt;\r\n    &lt;\/instance&gt;\r\n  &lt;\/application&gt;\r\n&lt;\/applications&gt;\r\n<\/pre>\n<\/li>\n<\/ul>\n<p><strong>Query for instances for a specific application id<\/strong><\/p>\n<ul>\n<li>GET method:\n<pre class=\"brush: plain; title: ; notranslate\" title=\"\">\r\nhttp:\/\/localhost:8761\/eureka\/apps\/{your app id}\r\n\r\n\/\/ Example\r\nhttp:\/\/localhost:8761\/eureka\/apps\/weatherapi\r\n<\/pre>\n<\/li>\n<li>Response:\n<pre class=\"brush: plain; title: ; notranslate\" title=\"\">\r\n&lt;application&gt;\r\n    &lt;name&gt;WEATHERAPI&lt;\/name&gt;\r\n    &lt;instance&gt;\r\n        &lt;instanceId&gt;localhost:weatherapi:5001&lt;\/instanceId&gt;\r\n        &lt;hostName&gt;localhost&lt;\/hostName&gt;\r\n        &lt;app&gt;WEATHERAPI&lt;\/app&gt;\r\n        &lt;ipAddr&gt;localhost&lt;\/ipAddr&gt;\r\n        &lt;status&gt;UP&lt;\/status&gt;\r\n        &lt;overriddenstatus&gt;UNKNOWN&lt;\/overriddenstatus&gt;\r\n        &lt;port enabled=&quot;false&quot;&gt;8080&lt;\/port&gt;\r\n        &lt;securePort enabled=&quot;true&quot;&gt;5001&lt;\/securePort&gt;\r\n        &lt;countryId&gt;1&lt;\/countryId&gt;\r\n        &lt;dataCenterInfo class=&quot;com.netflix.appinfo.InstanceInfo$DefaultDataCenterInfo&quot;&gt;\r\n            &lt;name&gt;MyOwn&lt;\/name&gt;\r\n        &lt;\/dataCenterInfo&gt;\r\n        &lt;leaseInfo&gt;\r\n            &lt;renewalIntervalInSecs&gt;30&lt;\/renewalIntervalInSecs&gt;\r\n            &lt;durationInSecs&gt;90&lt;\/durationInSecs&gt;\r\n            &lt;registrationTimestamp&gt;1611512017058&lt;\/registrationTimestamp&gt;\r\n            &lt;lastRenewalTimestamp&gt;1611516936969&lt;\/lastRenewalTimestamp&gt;\r\n            &lt;evictionTimestamp&gt;0&lt;\/evictionTimestamp&gt;\r\n            &lt;serviceUpTimestamp&gt;1611512016403&lt;\/serviceUpTimestamp&gt;\r\n        &lt;\/leaseInfo&gt;\r\n        &lt;metadata class=&quot;java.util.Collections$EmptyMap&quot;\/&gt;\r\n        &lt;homePageUrl&gt;https:\/\/localhost:5001\/&lt;\/homePageUrl&gt;\r\n        &lt;statusPageUrl&gt;https:\/\/localhost:5001\/actuator\/info&lt;\/statusPageUrl&gt;\r\n        &lt;healthCheckUrl&gt;https:\/\/localhost:5001\/actuator\/health&lt;\/healthCheckUrl&gt;\r\n        &lt;vipAddress&gt;weatherapi&lt;\/vipAddress&gt;\r\n        &lt;secureVipAddress&gt;weatherapi&lt;\/secureVipAddress&gt;\r\n        &lt;isCoordinatingDiscoveryServer&gt;false&lt;\/isCoordinatingDiscoveryServer&gt;\r\n        &lt;lastUpdatedTimestamp&gt;1611512017058&lt;\/lastUpdatedTimestamp&gt;\r\n        &lt;lastDirtyTimestamp&gt;1611512016217&lt;\/lastDirtyTimestamp&gt;\r\n        &lt;actionType&gt;ADDED&lt;\/actionType&gt;\r\n    &lt;\/instance&gt;\r\n&lt;\/application&gt;\r\n<\/pre>\n<\/li>\n<\/ul>\n<p><strong>Query for instances by its instance id<\/strong><\/p>\n<ul>\n<li>GET method:\n<pre class=\"brush: plain; title: ; notranslate\" title=\"\">\r\nhttp:\/\/localhost:8761\/eureka\/apps\/{your app id}\/{your instance id}\r\n\r\n\/\/ Example\r\nhttp:\/\/localhost:8761\/eureka\/apps\/weatherapi\/localhost:weatherapi:5001\r\n<\/pre>\n<\/li>\n<li>Response:\n<pre class=\"brush: plain; title: ; notranslate\" title=\"\">\r\n&lt;instance&gt;\r\n    &lt;instanceId&gt;localhost:weatherapi:5001&lt;\/instanceId&gt;\r\n    &lt;hostName&gt;localhost&lt;\/hostName&gt;\r\n    &lt;app&gt;WEATHERAPI&lt;\/app&gt;\r\n    &lt;ipAddr&gt;localhost&lt;\/ipAddr&gt;\r\n    &lt;status&gt;UP&lt;\/status&gt;\r\n    &lt;overriddenstatus&gt;UNKNOWN&lt;\/overriddenstatus&gt;\r\n    &lt;port enabled=&quot;false&quot;&gt;8080&lt;\/port&gt;\r\n    &lt;securePort enabled=&quot;true&quot;&gt;5001&lt;\/securePort&gt;\r\n    &lt;countryId&gt;1&lt;\/countryId&gt;\r\n    &lt;dataCenterInfo class=&quot;com.netflix.appinfo.InstanceInfo$DefaultDataCenterInfo&quot;&gt;\r\n        &lt;name&gt;MyOwn&lt;\/name&gt;\r\n    &lt;\/dataCenterInfo&gt;\r\n    &lt;leaseInfo&gt;\r\n        &lt;renewalIntervalInSecs&gt;30&lt;\/renewalIntervalInSecs&gt;\r\n        &lt;durationInSecs&gt;90&lt;\/durationInSecs&gt;\r\n        &lt;registrationTimestamp&gt;1611512017058&lt;\/registrationTimestamp&gt;\r\n        &lt;lastRenewalTimestamp&gt;1611517116997&lt;\/lastRenewalTimestamp&gt;\r\n        &lt;evictionTimestamp&gt;0&lt;\/evictionTimestamp&gt;\r\n        &lt;serviceUpTimestamp&gt;1611512016403&lt;\/serviceUpTimestamp&gt;\r\n    &lt;\/leaseInfo&gt;\r\n    &lt;metadata class=&quot;java.util.Collections$EmptyMap&quot;\/&gt;\r\n    &lt;homePageUrl&gt;https:\/\/localhost:5001\/&lt;\/homePageUrl&gt;\r\n    &lt;statusPageUrl&gt;https:\/\/localhost:5001\/actuator\/info&lt;\/statusPageUrl&gt;\r\n    &lt;healthCheckUrl&gt;https:\/\/localhost:5001\/actuator\/health&lt;\/healthCheckUrl&gt;\r\n    &lt;vipAddress&gt;weatherapi&lt;\/vipAddress&gt;\r\n    &lt;secureVipAddress&gt;weatherapi&lt;\/secureVipAddress&gt;\r\n    &lt;isCoordinatingDiscoveryServer&gt;false&lt;\/isCoordinatingDiscoveryServer&gt;\r\n    &lt;lastUpdatedTimestamp&gt;1611512017058&lt;\/lastUpdatedTimestamp&gt;\r\n    &lt;lastDirtyTimestamp&gt;1611512016217&lt;\/lastDirtyTimestamp&gt;\r\n    &lt;actionType&gt;ADDED&lt;\/actionType&gt;\r\n&lt;\/instance&gt;\r\n<\/pre>\n<\/li>\n<\/ul>\n<p><strong>Register an application instance<\/strong><\/p>\n<ul>\n<li>POST method:<br \/>\nHeaders: &#8220;Content-Type&#8221;: &#8220;application\/json&#8221;, &#8220;Accept&#8221;: &#8220;application\/json&#8221;<\/p>\n<pre class=\"brush: plain; title: ; notranslate\" title=\"\">\r\nhttp:\/\/localhost:8761\/eureka\/apps\/{your app id}\r\n\r\n\/\/ Example\r\nhttp:\/\/localhost:8761\/eureka\/apps\/myapp\r\n<\/pre>\n<\/li>\n<li>\nBody: <\/p>\n<pre class=\"brush: plain; title: ; notranslate\" title=\"\">\r\n{\r\n  &quot;instance&quot;: {\r\n    &quot;hostName&quot;: &quot;myhost&quot;,\r\n    &quot;app&quot;: &quot;myapp&quot;,\r\n    &quot;vipAddress&quot;: &quot;myservice&quot;,\r\n    &quot;secureVipAddress&quot;: &quot;myservice&quot;,\r\n    &quot;ipAddr&quot;: &quot;10.0.0.10&quot;,\r\n    &quot;status&quot;: &quot;STARTING&quot;,\r\n    &quot;port&quot;: {&quot;$&quot;: &quot;8080&quot;, &quot;@enabled&quot;: &quot;true&quot;},\r\n    &quot;securePort&quot;: {&quot;$&quot;: &quot;8443&quot;, &quot;@enabled&quot;: &quot;true&quot;},\r\n    &quot;healthCheckUrl&quot;: &quot;http:\/\/myservice:8080\/healthcheck&quot;,\r\n    &quot;statusPageUrl&quot;: &quot;http:\/\/myservice:8080\/status&quot;,\r\n    &quot;homePageUrl&quot;: &quot;http:\/\/myservice:8080&quot;,\r\n    &quot;dataCenterInfo&quot;: {\r\n      &quot;@class&quot;: &quot;com.netflix.appinfo.InstanceInfo$DefaultDataCenterInfo&quot;, \r\n      &quot;name&quot;: &quot;MyOwn&quot;\r\n    }\r\n  }\r\n}\r\n<\/pre>\n<\/li>\n<li>Response: 204 No Content<\/li>\n<\/ul>\n<p>As you will see from the <em>status<\/em> we&#8217;ve set this service to STARTING and hence we need set the <em>status<\/em> to UP when our service is running. Eureka, ofcourse, is just a registry and hence you service need to updated information as required.<\/p>\n<p><strong>Delete an instance<\/strong><\/p>\n<ul>\n<li>DELETE method:\n<pre class=\"brush: plain; title: ; notranslate\" title=\"\">\r\nhttp:\/\/localhost:8761\/eureka\/apps\/{your app id}\/{your instance id}\r\n\r\n\/\/ Example\r\nhttp:\/\/localhost:8761\/eureka\/apps\/myapp\/myhost\r\n<\/pre>\n<\/li>\n<li>Response: 200 OK<\/li>\n<\/ul>\n<p><strong>Send an application instance heartbeat<\/strong><\/p>\n<ul>\n<li>PUT  method:\n<pre class=\"brush: plain; title: ; notranslate\" title=\"\">\r\nhttp:\/\/localhost:8761\/eureka\/apps\/{your app id}\/{your instance id}\r\n\r\n\/\/ Example\r\nhttp:\/\/localhost:8761\/eureka\/apps\/myapp\/myhost\r\n<\/pre>\n<\/li>\n<li>Response: 200 OK, or 404 if the instance doesn&#8217;t exist<\/li>\n<\/ul>\n<p><strong>Take an instance out of service<\/strong><\/p>\n<ul>\n<li>PUT  method:\n<pre class=\"brush: plain; title: ; notranslate\" title=\"\">\r\nhttp:\/\/localhost:8761\/eureka\/apps\/{your app id}\/{your instance id}\/status?value=OUT_OF_SERVICE\r\n\r\n\/\/ Example\r\nhttp:\/\/localhost:8761\/eureka\/apps\/myapp\/myhost\/status?value=OUT_OF_SERVICE\r\n<\/pre>\n<\/li>\n<li>Response: 200 OK, or 500 on failure<\/li>\n<\/ul>\n<p>Now in the Eureka dashboard you&#8217;ll see the large, red OUT_OF_SERVICE text.<\/p>\n<p><strong>Remove the out of service state<\/strong><\/p>\n<ul>\n<li>DELETE  method:\n<pre class=\"brush: plain; title: ; notranslate\" title=\"\">\r\nhttp:\/\/localhost:8761\/eureka\/apps\/{your app id}\/{your instance id}\/status?value=UP\r\n\r\n\/\/ Example\r\nhttp:\/\/localhost:8761\/eureka\/apps\/myapp\/myhost\/status?value=UP\r\n<\/pre>\n<\/li>\n<li>Response: 200 OK, or 500 on failure<\/li>\n<\/ul>\n<p>The status UP is optional, it&#8217;s a suggestion for the status after the removal of the OUT OF SERVICE override.<\/p>\n<p><strong>Update meta data<\/strong><\/p>\n<ul>\n<li>PUT  method:\n<pre class=\"brush: plain; title: ; notranslate\" title=\"\">\r\nhttp:\/\/localhost:8761\/eureka\/apps\/{your app id}\/{your instance id}\/metadata?key=val\r\n\r\n\/\/ Example\r\nhttp:\/\/localhost:8761\/eureka\/apps\/myapp\/myhost\/metadata?Version=2\r\n<\/pre>\n<\/li>\n<li>Response: 200 OK, or 500 on failure<\/li>\n<\/ul>\n<p><strong>Query for all instance of a vip address<\/strong><\/p>\n<ul>\n<li>GET  method:\n<pre class=\"brush: plain; title: ; notranslate\" title=\"\">\r\nhttp:\/\/localhost:8761\/eureka\/vips\/{your vipAddress}\r\n\r\n\/\/ Example\r\nhttp:\/\/localhost:8761\/eureka\/vips\/myservice\r\n<\/pre>\n<\/li>\n<li>Response: 200 OK, or 404 if vipAddress does not exist\n<pre class=\"brush: plain; title: ; notranslate\" title=\"\">\r\n&lt;applications&gt;\r\n    &lt;versions__delta&gt;-1&lt;\/versions__delta&gt;\r\n    &lt;apps__hashcode&gt;UP_1_&lt;\/apps__hashcode&gt;\r\n    &lt;application&gt;\r\n        &lt;name&gt;MYAPP&lt;\/name&gt;\r\n        &lt;instance&gt;\r\n            &lt;hostName&gt;myhost&lt;\/hostName&gt;\r\n            &lt;app&gt;MYAPP&lt;\/app&gt;\r\n            &lt;ipAddr&gt;10.0.0.10&lt;\/ipAddr&gt;\r\n            &lt;status&gt;UP&lt;\/status&gt;\r\n            &lt;overriddenstatus&gt;UNKNOWN&lt;\/overriddenstatus&gt;\r\n            &lt;port enabled=&quot;true&quot;&gt;8080&lt;\/port&gt;\r\n            &lt;securePort enabled=&quot;true&quot;&gt;8443&lt;\/securePort&gt;\r\n            &lt;countryId&gt;1&lt;\/countryId&gt;\r\n            &lt;dataCenterInfo class=&quot;com.netflix.appinfo.InstanceInfo$DefaultDataCenterInfo&quot;&gt;\r\n                &lt;name&gt;MyOwn&lt;\/name&gt;\r\n            &lt;\/dataCenterInfo&gt;\r\n            &lt;leaseInfo&gt;\r\n                &lt;renewalIntervalInSecs&gt;30&lt;\/renewalIntervalInSecs&gt;\r\n                &lt;durationInSecs&gt;90&lt;\/durationInSecs&gt;\r\n                &lt;registrationTimestamp&gt;1611519061947&lt;\/registrationTimestamp&gt;\r\n                &lt;lastRenewalTimestamp&gt;1611519061947&lt;\/lastRenewalTimestamp&gt;\r\n                &lt;evictionTimestamp&gt;0&lt;\/evictionTimestamp&gt;\r\n                &lt;serviceUpTimestamp&gt;1611518524498&lt;\/serviceUpTimestamp&gt;\r\n            &lt;\/leaseInfo&gt;\r\n            &lt;metadata&gt;\r\n                &lt;Version&gt;2&lt;\/Version&gt;\r\n            &lt;\/metadata&gt;\r\n            &lt;homePageUrl&gt;http:\/\/myservice:8080&lt;\/homePageUrl&gt;\r\n            &lt;statusPageUrl&gt;http:\/\/myservice:8080\/status&lt;\/statusPageUrl&gt;\r\n            &lt;healthCheckUrl&gt;http:\/\/myservice:8080\/healthcheck&lt;\/healthCheckUrl&gt;\r\n            &lt;vipAddress&gt;myservice&lt;\/vipAddress&gt;\r\n            &lt;secureVipAddress&gt;myservice&lt;\/secureVipAddress&gt;\r\n            &lt;isCoordinatingDiscoveryServer&gt;false&lt;\/isCoordinatingDiscoveryServer&gt;\r\n            &lt;lastUpdatedTimestamp&gt;1611519061947&lt;\/lastUpdatedTimestamp&gt;\r\n            &lt;lastDirtyTimestamp&gt;1611518524498&lt;\/lastDirtyTimestamp&gt;\r\n            &lt;actionType&gt;ADDED&lt;\/actionType&gt;\r\n        &lt;\/instance&gt;\r\n    &lt;\/application&gt;\r\n&lt;\/applications&gt;\r\n<\/pre>\n<\/ul>\n<p><strong>Query for all instance of a secure vip address<\/strong><\/p>\n<ul>\n<li>GET  method:\n<pre class=\"brush: plain; title: ; notranslate\" title=\"\">\r\nhttp:\/\/localhost:8761\/eureka\/svips\/{your svipAddress}\r\n\r\n\/\/ Example\r\nhttp:\/\/localhost:8761\/eureka\/svips\/myservice\r\n<\/pre>\n<\/li>\n<li>Response: 200 OK, or 404 is svipAddress does not exist\n<pre class=\"brush: plain; title: ; notranslate\" title=\"\">\r\n&lt;applications&gt;\r\n    &lt;versions__delta&gt;-1&lt;\/versions__delta&gt;\r\n    &lt;apps__hashcode&gt;UP_1_&lt;\/apps__hashcode&gt;\r\n    &lt;application&gt;\r\n        &lt;name&gt;MYAPP&lt;\/name&gt;\r\n        &lt;instance&gt;\r\n            &lt;hostName&gt;myhost&lt;\/hostName&gt;\r\n            &lt;app&gt;MYAPP&lt;\/app&gt;\r\n            &lt;ipAddr&gt;10.0.0.10&lt;\/ipAddr&gt;\r\n            &lt;status&gt;UP&lt;\/status&gt;\r\n            &lt;overriddenstatus&gt;UNKNOWN&lt;\/overriddenstatus&gt;\r\n            &lt;port enabled=&quot;true&quot;&gt;8080&lt;\/port&gt;\r\n            &lt;securePort enabled=&quot;true&quot;&gt;8443&lt;\/securePort&gt;\r\n            &lt;countryId&gt;1&lt;\/countryId&gt;\r\n            &lt;dataCenterInfo class=&quot;com.netflix.appinfo.InstanceInfo$DefaultDataCenterInfo&quot;&gt;\r\n                &lt;name&gt;MyOwn&lt;\/name&gt;\r\n            &lt;\/dataCenterInfo&gt;\r\n            &lt;leaseInfo&gt;\r\n                &lt;renewalIntervalInSecs&gt;30&lt;\/renewalIntervalInSecs&gt;\r\n                &lt;durationInSecs&gt;90&lt;\/durationInSecs&gt;\r\n                &lt;registrationTimestamp&gt;1611519061947&lt;\/registrationTimestamp&gt;\r\n                &lt;lastRenewalTimestamp&gt;1611519061947&lt;\/lastRenewalTimestamp&gt;\r\n                &lt;evictionTimestamp&gt;0&lt;\/evictionTimestamp&gt;\r\n                &lt;serviceUpTimestamp&gt;1611518524498&lt;\/serviceUpTimestamp&gt;\r\n            &lt;\/leaseInfo&gt;\r\n            &lt;metadata&gt;\r\n                &lt;Version&gt;2&lt;\/Version&gt;\r\n            &lt;\/metadata&gt;\r\n            &lt;homePageUrl&gt;http:\/\/myservice:8080&lt;\/homePageUrl&gt;\r\n            &lt;statusPageUrl&gt;http:\/\/myservice:8080\/status&lt;\/statusPageUrl&gt;\r\n            &lt;healthCheckUrl&gt;http:\/\/myservice:8080\/healthcheck&lt;\/healthCheckUrl&gt;\r\n            &lt;vipAddress&gt;myservice&lt;\/vipAddress&gt;\r\n            &lt;secureVipAddress&gt;myservice&lt;\/secureVipAddress&gt;\r\n            &lt;isCoordinatingDiscoveryServer&gt;false&lt;\/isCoordinatingDiscoveryServer&gt;\r\n            &lt;lastUpdatedTimestamp&gt;1611519061947&lt;\/lastUpdatedTimestamp&gt;\r\n            &lt;lastDirtyTimestamp&gt;1611518524498&lt;\/lastDirtyTimestamp&gt;\r\n            &lt;actionType&gt;ADDED&lt;\/actionType&gt;\r\n        &lt;\/instance&gt;\r\n    &lt;\/application&gt;\r\n&lt;\/applications&gt;\r\n<\/pre>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>In previous posts we&#8217;ve used Steeltoe to interact with Eureka. Obviously Steeltoe gives us good patterns for interacting with Eureka but also has the capability to work with other service discovery registries etc. Steeltoe&#8217;s great, but what if we wanted to just write our own Eureka either for learning how things work or maybe we [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[240],"tags":[],"class_list":["post-8677","post","type-post","status-publish","format-standard","hentry","category-eureka"],"jetpack_sharing_enabled":true,"jetpack_featured_media_url":"","_links":{"self":[{"href":"https:\/\/putridparrot.com\/blog\/wp-json\/wp\/v2\/posts\/8677","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/putridparrot.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/putridparrot.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/putridparrot.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/putridparrot.com\/blog\/wp-json\/wp\/v2\/comments?post=8677"}],"version-history":[{"count":5,"href":"https:\/\/putridparrot.com\/blog\/wp-json\/wp\/v2\/posts\/8677\/revisions"}],"predecessor-version":[{"id":8683,"href":"https:\/\/putridparrot.com\/blog\/wp-json\/wp\/v2\/posts\/8677\/revisions\/8683"}],"wp:attachment":[{"href":"https:\/\/putridparrot.com\/blog\/wp-json\/wp\/v2\/media?parent=8677"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/putridparrot.com\/blog\/wp-json\/wp\/v2\/categories?post=8677"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/putridparrot.com\/blog\/wp-json\/wp\/v2\/tags?post=8677"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}