Zuul হল একটি API Gateway এবং Edge Service যা স্প্রিং ক্লাউডের অংশ হিসেবে ব্যবহৃত হয়। এটি মাইক্রোসার্ভিস আর্কিটেকচারে সার্ভিসগুলোর মধ্যে রাউটিং, লোড ব্যালান্সিং, সিকিউরিটি, রেট লিমিটিং, এবং অন্যান্য কনসার্নগুলির সমাধান করতে ব্যবহৃত হয়। Zuul মূলত HTTP রিকোয়েস্টের জন্য একটি এন্ট্রি পয়েন্ট হিসেবে কাজ করে এবং ইন্টারনাল সার্ভিসগুলির মধ্যে রাউটিং করে।
Zuul Edge Server Setup
স্প্রিং ক্লাউড Zuul ব্যবহারের জন্য আপনাকে কিছু নির্দিষ্ট ডিপেনডেন্সি যুক্ত করতে হবে এবং কনফিগারেশন করতে হবে। এটির মাধ্যমে আপনি API গেটওয়ে হিসেবে কাজ করতে পারবেন যা আপনার সার্ভিসগুলোকে এক্সপোজ করবে।
ধাপ ১: Zuul Server ডিপেনডেন্সি যোগ করা
spring-cloud-starter-netflix-zuul ডিপেনডেন্সি pom.xml ফাইলে যোগ করুন:
pom.xml (Zuul Server):
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-zuul</artifactId>
</dependency>
ধাপ ২: Zuul Server কনফিগারেশন
Zuul Server সক্রিয় করার জন্য @EnableZuulProxy অ্যানোটেশন ব্যবহার করতে হবে। এটি Zuul কে API গেটওয়ে হিসেবে কনফিগার করে এবং এটি সমস্ত রাউটিং কাজ পরিচালনা করবে।
Zuul Server Application Class:
package com.example.zuulserver;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.zuul.EnableZuulProxy;
@SpringBootApplication
@EnableZuulProxy
public class ZuulServerApplication {
public static void main(String[] args) {
SpringApplication.run(ZuulServerApplication.class, args);
}
}
এখানে @EnableZuulProxy অ্যানোটেশন Zuul প্রোক্সি সক্রিয় করে দেয়, যা API গেটওয়ে হিসেবে কাজ করবে এবং রাউটিং করবে।
ধাপ ৩: Zuul সার্ভিসের জন্য রাউটিং কনফিগারেশন
application.yml বা application.properties ফাইলে Zuul রাউটিং কনফিগারেশন করতে হবে, যেখানে আপনি মাইক্রোসার্ভিসগুলোর জন্য রাউটিং পথ এবং সার্ভিসের URL উল্লেখ করবেন।
application.yml (Zuul Server):
server:
port: 8080
spring:
application:
name: zuul-server
zuul:
routes:
user-service:
path: /user/** # 'user-service' এর জন্য /user/** রাউটিং
service-id: user-service
product-service:
path: /product/** # 'product-service' এর জন্য /product/** রাউটিং
service-id: product-service
ribbon:
ReadTimeout: 5000
ConnectTimeout: 5000
এখানে:
zuul.routes: রাউটিং কনফিগারেশন, যেখানেpathএবংservice-idউল্লেখ করা হয়েছে।service-idহল মাইক্রোসার্ভিসের নাম যা Eureka সার্ভিস ডিসকভারি ব্যবহার করলে পাওয়া যাবে।/user/**এবং/product/**হল Zuul-এ মাইক্রোসার্ভিসগুলির জন্য এক্সপোজড এন্ডপয়েন্ট।
ধাপ ৪: Eureka Server কনফিগারেশন (Optional)
Zuul সার্ভার Eureka সার্ভিস ডিসকভারি ব্যবহার করতে পারে। যদি আপনি মাইক্রোসার্ভিস রেজিস্ট্রেশন এবং ডিসকভারি করতে চান, তাহলে Eureka Server কনফিগার করতে হবে।
pom.xml (Eureka Client):
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
application.yml (Zuul Server with Eureka):
spring:
application:
name: zuul-server
cloud:
discovery:
enabled: true # Eureka সার্ভিস ডিসকভারি সক্ষম
zuul:
routes:
user-service:
path: /user/**
service-id: user-service
product-service:
path: /product/**
service-id: product-service
এখানে service-id হল Eureka-তে নিবন্ধিত মাইক্রোসার্ভিসের নাম, এবং Zuul সেই সার্ভিসগুলো থেকে রিকোয়েস্ট পাঠাবে।
ধাপ ৫: Zuul Client Service Setup
Zuul Client Service একটি মাইক্রোসার্ভিস হবে যেটি Zuul Server থেকে রাউট হওয়া রিকোয়েস্ট পাবেন।
User Service Example:
UserServiceApplication.java:
package com.example.userservice;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class UserServiceApplication {
public static void main(String[] args) {
SpringApplication.run(UserServiceApplication.class, args);
}
}
application.yml (User Service):
server:
port: 8081
spring:
application:
name: user-service
এখানে, user-service হচ্ছে Eureka বা Zuul সার্ভারে নিবন্ধিত সার্ভিস।
ধাপ ৬: Zuul Server Test
Zuul সার্ভার রান করার পর, আপনি **/user/** এবং /product/** URL পাথের মাধ্যমে মাইক্রোসার্ভিসগুলিতে পৌঁছাতে পারবেন। উদাহরণস্বরূপ:
http://localhost:8080/user/api/usersএই URL-এর মাধ্যমে Zuul User Service এন্ডপয়েন্টে রিকোয়েস্ট পাঠাবে।http://localhost:8080/product/api/productsএই URL-এর মাধ্যমে Zuul Product Service এন্ডপয়েন্টে রিকোয়েস্ট পাঠাবে।
এখানে, Zuul Server রিকোয়েস্টগুলি user-service এবং product-service মাইক্রোসার্ভিসগুলিতে রাউট করবে।
ধাপ ৭: Zuul Client এর সাথে সিকিউরিটি এবং ফিচার
Zuul সার্ভারের মধ্যে আরও অনেক ফিচার যোগ করা যায়:
- Authentication and Authorization: Zuul সার্ভার এবং মাইক্রোসার্ভিসের মধ্যে সিকিউরিটি ব্যবস্থা প্রয়োগ করতে পারেন।
- Filters: Zuul ফিল্টার ব্যবহার করে রিকোয়েস্ট এবং রেসপন্সে পরিবর্তন বা প্রক্রিয়াকরণ করতে পারেন (যেমন, লগিং, সিকিউরিটি, রেট লিমিটিং ইত্যাদি)।
Example: Zuul Filter
import com.netflix.zuul.ZuulFilter;
import org.springframework.stereotype.Component;
@Component
public class MyZuulFilter extends ZuulFilter {
@Override
public String filterType() {
return "pre"; // রিকোয়েস্ট আসার আগে ফিল্টার কার্যকর হবে
}
@Override
public int filterOrder() {
return 1;
}
@Override
public boolean shouldFilter() {
return true;
}
@Override
public Object run() {
// ফিল্টার লজিক
System.out.println("Request is being filtered");
return null;
}
}
সারাংশ:
- Zuul হল একটি API গেটওয়ে যা আপনার মাইক্রোসার্ভিস আর্কিটেকচারে সেন্ট্রাল এন্ট্রি পয়েন্ট হিসেবে কাজ করে।
- এটি Eureka বা অন্যান্য সার্ভিস ডিসকভারি সিস্টেমের সাথে ইন্টিগ্রেট হতে পারে, যা মাইক্রোসার্ভিসগুলোর মধ্যে রাউটিং পরিচালনা করে।
- Zuul API গেটওয়ে হিসেবে বিভিন্ন ধরনের ফিচার যেমন রাউটিং, সিকিউরিটি, রেট লিমিটিং এবং লগিং প্রদান করতে সাহায্য করে।
Read more