برنامه نویسی

ایجاد کشف خدمات با بهار Cloud Gateway و Eureka

مقدمه

در این مقاله ، ما دو الگوی گسترده ای را که در معماری های میکروسرویس مورد استفاده قرار می گیرد ، کشف خواهیم کرد: کشف خدماتی اشمیه دروازه APIبشر ما آب و برق ، مزایا و نحوه اجرای آنها را خواهیم دید دروازه ابر بهار اشمیه سرور Eurekaبشر

سرویس کشف چیست؟

در یک محیط میکروسرویس ، ممکن است مشتری نیاز به برقراری ارتباط با چندین API که در درها و سرورهای مختلف اجرا می شود. اما مشتری معمولاً آدرس های دقیق این API ها را نمی داند.

سناریوی زیر را تصور کنید:

نمودار نشان دهنده مشتری در تلاش برای دسترسی به چندین API بدون کشف خدمات

اگر راهی برای کشف خودکار خدمات موجود وجود نداشته باشد ، ما باید آدرس های هر API را به صورت دستی مدیریت کنیم. این امر باعث می شود تعمیر و نگهداری سیستم پیچیده تر و مستعد خطاها باشد.

اینجاست کشف خدماتیبشر این به عنوان نوعی بانک ثبت نام عمل می کند ، در صورت افزایش برنامه ها ، در آن ثبت نام می کند و به مشتریان امکان می دهد به طور خودکار در محل کار خود کشف کنند. در اکوسیستم بهار ، ما از سرور Eureka برای این قابلیت

با شروع برنامه ها ، آنها در Eureka Server ثبت نام می کنند. بنابراین ، هر مشتری می تواند با Eureka مشورت کند و دریابد که کدام خدمات در دسترس هستند و در کجا کار می کنند.

با این رویکرد ، دروازه API این تنها می تواند به عنوان روتر عمل کند و مسئولیت مدیریت سوابق خدمات را به Eureka منتقل می کند:

نمودار نشان می دهد که چگونه کشف خدمات ارتباط بین خدمات را تسهیل می کند

اجرای

حال ، بیایید دروازه ای را که به دنبال خدمات ضبط شده در Eureka Server است ، پیاده سازی کنیم. کد کامل این پروژه در پایان مقاله در مخزن موجود است.

ایجاد سرور Eureka

اولین قدم ایجاد یک پروژه بوت بهار است. من استفاده کردم ابتکار عمل بهار اما آن را همانطور که ترجیح می دهید انجام دهید. انتخاب وابستگی سرور Eurekaبشر

تصویر اولیه بهار برای سرور Eureka پیکربندی شده است

پس از ایجاد پروژه ، آن را به IDE خود باز کنید و تنظیمات زیر را در پرونده اضافه کنید application.properties:

server.port=8761
eureka.client.register-with-eureka=false
eureka.client.fetch-registry=false
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

  • server.port=8761: درب استاندارد سرور Eureka را تعریف می کند.
  • eureka.client.register-with-eureka=false: از آنجا که این سرور Eureka است ، او مجبور نیست در او ثبت نام کند.
  • eureka.client.fetch-registry=false: او نیازی به جستجوی سوابق ندارد ، فقط اطلاعاتی را به مشتریان ارائه می دهد.

اکنون ، در پرونده ServiceDiscoveryApplication، ما حاشیه نویسی را اضافه می کنیم @EnableEurekaServer:

@SpringBootApplication
@EnableEurekaServer
public class ServiceDiscoveryApplication {
    public static void main(String[] args) {
        SpringApplication.run(ServiceDiscoveryApplication.class, args);
    }
}
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

اکنون ، هنگام اجرای پروژه ، ما توانستیم رابط دسترسی سرور Eureka را مشاهده کنیم http://localhost:8761:

تصویر رابط سرور Eureka

در حال حاضر ما هیچ خدمتی در رکورد نداریم زیرا ما هیچ API را در سرور Eureka صعود نکرده ایم.

ایجاد خدمات مشتری (API-01 و API-02)

بیایید دو API ساده ایجاد کنیم (api-01 اشمیه api-02) که در یورکا ثبت می شود. برای این ، ما از ابتکار عمل بهار، اضافه کردن امکانات:

تصویر اولیه بهار تنظیم شده وب و مشتری Eureka

  • مشتری Eureka (برای ثبت نام با Eureka Server)
  • وب بهار (برای افشای نقاط پایانی)

تنظیمات

هیچ application.properties از هر API ، اضافه می کنیم:

server.port=8181  # Ou outra porta para a segunda API
eureka.client.service-url.default-zone=http://localhost:8761/eureka/
eureka.client.register-with-eureka=true
eureka.client.fetch-registry=true
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

ایجاد نقطه پایانی تست

اکنون ما یک کنترلر ساده برای افشای یک نقطه پایانی ایجاد می کنیم:

@RestController
@RequestMapping("/api")
public class HealthCheckController {
    @GetMapping("/health")
    public String healthCheck() {
        return "API-01 está saudável!";
    }
}
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

با این کار ، وقتی API ها را اجرا می کنیم ، آنها به طور خودکار در Eureka Server ثبت نام می کنند.

شرح تصویر

توجه داشته باشید که در تصویر ما دروازه در معرض آن را نیز داریم ، در مرحله بعدی اجرا می شود.

خوب ، ما قبلاً Eureka Server ، API-01 و API-02 ایجاد کرده ایم. آنها در حال حاضر در حال اجرا ، ثبت نام هستند و می توانند از خدمات Discovery ما اطلاعاتی را جستجو کنند. اکنون ما چیزی شبیه به یک کتاب آدرس داریم که در آن توانسته ایم به اطلاعات API دسترسی پیدا کنیم بدون اینکه هر آدرس و بندر را به صورت دستی به خاطر بسپاریم.
اما هنوز چیزی از دست رفته است. ما نمی خواهیم مشتری نیاز به دانستن آدرس های خاص هر API داشته باشد ، درست است؟ برای حل این مسئله ، از یک دروازه استفاده می کنیم. این شرکت با ثبت نام خدمات مشورت می کند و یک نقطه دسترسی به مشتریان را تصویب می کند ، و اطمینان می دهد که کلیه درخواست های میکروسرویس به طور شفاف مسیریابی می شود.

ایجاد دروازه API

مرحله بعدی ایجاد دروازه ابر بهار، که مسئولیت مسیر درخواست خدمات ثبت شده در Eureka را بر عهده خواهد داشت.

هیچ ابتکار عمل بهارما امکانات را اضافه می کنیم:

  • دروازه ابر بهار
  • مشتری Eureka

تنظیمات دروازه

هیچ application.propertiesما اضافه می کنیم:

eureka.client.service-url.default-zone=http://localhost:8761/eureka/
eureka.client.register-with-eureka=true
eureka.client.fetch-registry=true

spring.cloud.gateway.discovery.locator.enabled=true
spring.cloud.gateway.discovery.locator.lower-case-service-id=true
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

  • spring.cloud.gateway.discovery.locator.enabled=true: اجازه می دهد تا دروازه به طور خودکار خدمات ضبط شده در Eureka را کشف کند.
  • spring.cloud.gateway.discovery.locator.lower-case-service-id=true: اطمینان حاصل می کند که نام برنامه ها با حروف کوچک تحت درمان قرار می گیرند و درخواست ها را قابل خواندن تر می کند.

ارتباطات تست

اکنون که دروازه و خدمات پیکربندی شده اند ، می توانیم ارتباطات را آزمایش کنیم.

  1. ما سرور Eureka را دور می زنیم
  2. ما API ها را اجرا می کنیم (api-01 اشمیه api-02)
  3. Rodamos O API Gateway
  4. ما سرور Eureka را بررسی کردیم (http://localhost:8761)

    • API ها باید همانطور که ضبط شده ظاهر شوند.
  5. ما مسیریابی را آزمایش کردیم

    • http://localhost:8080/api-01/api/health → باید برگردد: API-01 está saudável!
    • http://localhost:8080/api-02/api/health → باید برگردد: API-02 está saudável!

Gateway به درستی کار می کند ، و به طور خودکار درخواست های خدمات را مسیریابی می کند!

پایان

با این اجرای ، ما موفق شدیم:

✅ ایجاد یک سرور Eureka برای مدیریت ثبت نام خدمات.
✅ ایجاد مشتریان APIS که به طور خودکار در Eureka ضبط می شوند.
✅ پیکربندی a دروازه API این مسیرها را بدون نقشه برداری از نقاط پایانی به صورت دستی.
scare مقیاس پذیری و حفظ خدمات را تسهیل کنید.

این رویکرد باعث کاهش اتصال بین خدمات و تسهیل ارتباط پویا بین میکروسرویس می شود.

📌 به کد کامل پروژه می توانید از اینجا دسترسی پیدا کنید (https://github.com/marcelovmendes/service-discovery).

مقاله را دوست داشتید؟ به اشتراک بگذارید و نظر خود را بگذارید! 🚀

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا