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

مقدمه
در این مقاله ، ما دو الگوی گسترده ای را که در معماری های میکروسرویس مورد استفاده قرار می گیرد ، کشف خواهیم کرد: کشف خدماتی اشمیه دروازه APIبشر ما آب و برق ، مزایا و نحوه اجرای آنها را خواهیم دید دروازه ابر بهار اشمیه سرور Eurekaبشر
سرویس کشف چیست؟
در یک محیط میکروسرویس ، ممکن است مشتری نیاز به برقراری ارتباط با چندین API که در درها و سرورهای مختلف اجرا می شود. اما مشتری معمولاً آدرس های دقیق این API ها را نمی داند.
سناریوی زیر را تصور کنید:
اگر راهی برای کشف خودکار خدمات موجود وجود نداشته باشد ، ما باید آدرس های هر API را به صورت دستی مدیریت کنیم. این امر باعث می شود تعمیر و نگهداری سیستم پیچیده تر و مستعد خطاها باشد.
اینجاست کشف خدماتیبشر این به عنوان نوعی بانک ثبت نام عمل می کند ، در صورت افزایش برنامه ها ، در آن ثبت نام می کند و به مشتریان امکان می دهد به طور خودکار در محل کار خود کشف کنند. در اکوسیستم بهار ، ما از سرور Eureka برای این قابلیت
با شروع برنامه ها ، آنها در Eureka Server ثبت نام می کنند. بنابراین ، هر مشتری می تواند با Eureka مشورت کند و دریابد که کدام خدمات در دسترس هستند و در کجا کار می کنند.
با این رویکرد ، دروازه API این تنها می تواند به عنوان روتر عمل کند و مسئولیت مدیریت سوابق خدمات را به Eureka منتقل می کند:
اجرای
حال ، بیایید دروازه ای را که به دنبال خدمات ضبط شده در Eureka Server است ، پیاده سازی کنیم. کد کامل این پروژه در پایان مقاله در مخزن موجود است.
ایجاد سرور 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
:
در حال حاضر ما هیچ خدمتی در رکورد نداریم زیرا ما هیچ API را در سرور Eureka صعود نکرده ایم.
ایجاد خدمات مشتری (API-01 و API-02)
بیایید دو API ساده ایجاد کنیم (api-01
اشمیه api-02
) که در یورکا ثبت می شود. برای این ، ما از ابتکار عمل بهار، اضافه کردن امکانات:
- مشتری 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
: اطمینان حاصل می کند که نام برنامه ها با حروف کوچک تحت درمان قرار می گیرند و درخواست ها را قابل خواندن تر می کند.
ارتباطات تست
اکنون که دروازه و خدمات پیکربندی شده اند ، می توانیم ارتباطات را آزمایش کنیم.
- ما سرور Eureka را دور می زنیم
- ما API ها را اجرا می کنیم (
api-01
اشمیهapi-02
) - Rodamos O API Gateway
-
ما سرور Eureka را بررسی کردیم (
http://localhost:8761
)- API ها باید همانطور که ضبط شده ظاهر شوند.
-
ما مسیریابی را آزمایش کردیم
-
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).
مقاله را دوست داشتید؟ به اشتراک بگذارید و نظر خود را بگذارید! 🚀