2017-04-10 27 views
8

Vì vậy, chúng tôi có Java microservices được viết bằng Spring-Boot, sử dụng Consul để phát hiện dịch vụ và quản lý cấu hình và chạy trong vùng chứa Docker. Tất cả đều hoạt động, nhưng khi một container chết hoặc dịch vụ khởi động lại, id dịch vụ cũ không bao giờ biến mất trong Consul và dịch vụ mãi mãi sau khi hiển thị là "Thất bại" trong giao diện người dùng, mặc dù container mới đã đăng ký và hiển thị tất cả Màu xanh lá.Dịch vụ Consul và Spring Boot trong Docker - không hủy đăng ký

Chúng tôi không sử dụng nhịp tim - nhưng tôi không thể tìm thấy nhiều tài liệu về sự khác biệt giữa nhịp tim và kiểm tra sức khỏe dành cho Lãnh sự.

Dưới đây là bootstrp.yml tôi

spring: 
    application: 
    name: my-service 
    cloud: 
    config: 
     enabled: false 
    consul: 
     host: ${discovery.host:localhost} 
     port: ${discovery.port:8500} 
     config: 
     watch: 
      wait-time: 30 
      delay: 10000 
     profile-separator: "-" 
     format: FILES 
     discovery: 
     prefer-ip-address: true 
     instanceId: ${spring.application.name}:${spring.application.instance_id:${random.value}} 

Có các cài đặt khác để cho phép nhịp tim, nhưng các tài liệu nói điều gì đó về vấn đề này đặt căng thẳng thêm về cụm Lãnh.

Có ai quản lý để nhận các dịch vụ Lãnh sự và Spring Boot/Docker thực sự tự động đăng ký không? Nó thực sự không gây ra bất kỳ vấn đề thực sự nào, nhưng nó làm cho Consul UI khá vô dụng khi thực sự giám sát các dịch vụ lên/xuống.

+0

Có lẽ cái này giúp: http://stackoverflow.com/questions/32259323/consul-not-deregistering-zombie-services – gesellix

Trả lời

1

Lãnh sự không tự động hủy đăng ký dịch vụ.

Xem https://groups.google.com/forum/#!topic/consul-tool/slV5xfWRpEE để biết gợi ý về cùng một câu hỏi. Theo chủ đề đó, bạn cần cập nhật cấu hình hoặc thực hiện Agent API call. Vì tác nhân là nguồn gốc của sự thật, bạn không nên cố cập nhật thông qua API danh mục. Xem GitHub để biết chi tiết. Họ cũng đề cập đến nhóm Google rằng bạn không nhất thiết phải hủy đăng ký dịch vụ nếu nút giảm xuống một cách duyên dáng, nhưng điều đó dường như không phải là trường hợp sử dụng của bạn.

Vui lòng xem Consul not deregistering zombie services để biết các gợi ý về việc tự động hủy đăng ký dịch vụ bằng cách sử dụng api hoặc các công cụ như registrator.

1

Bạn đã đề cập đến việc bạn đang sử dụng vùng chứa docker để chạy microservice. Bạn đang bẫy SIGTERM trong kịch bản lệnh nhập cảnh của bạn trong vùng chứa docker? Nếu một SIGTERM được gửi đi, ứng dụng khởi động sẽ nhận được nó và bạn sẽ thấy nhật ký dưới đây cho thấy rằng microservice đang hủy đăng ký với Consul.

2017-04-27 09:20:19.854 INFO 6852 --- [on(6)-127.0.0.1] inMXBeanRegistrar$SpringApplicationAdmin : Application shutdown requested. 
2017-04-27 09:20:19.857 INFO 6852 --- [on(6)-127.0.0.1] ationConfigEmbeddedWebApplicationContext : Closing org.springframework.boot[email protected]afb5821: startup date [Thu Apr 27 09:20:00 EDT 2017]; parent: org.spring[email protected]130c12b7 
2017-04-27 09:20:19.859 INFO 6852 --- [on(6)-127.0.0.1] o.s.c.support.DefaultLifecycleProcessor : Stopping beans in phase 2147483647 
2017-04-27 09:20:19.863 INFO 6852 --- [on(6)-127.0.0.1] o.s.c.support.DefaultLifecycleProcessor : Stopping beans in phase 0 
2017-04-27 09:20:19.863 INFO 6852 --- [on(6)-127.0.0.1] o.s.c.c.s.ConsulServiceRegistry   : Deregistering service with consul: xxxxxxxxxxxxx 

This blog post discusses this.

+0

Yup, tôi đã suy nghĩ dọc theo những đường là tốt, nhưng trong nhật ký của tôi, tôi thấy thông báo "Deregistering with Consul ....". – Gandalf

+0

@Gandalf Bạn có đang sử dụng biểu mẫu này trong Dockerfile của mình không? {CMD exec java -jar microservice.jar} Trong thiết lập consul/docker/spring-boot của tôi, các dịch vụ được hủy đăng ký đúng cách. Sự khác biệt là, tôi không có một đại lý lãnh sự. Dịch vụ vi mô của tôi trực tiếp nói chuyện với máy chủ lãnh sự đang ở chế độ bootstrap. – cherit

Các vấn đề liên quan