হ্যালো! আজকের এই আলোচনায় আমরা শিখবো কীভাবে মাইক্রোসার্ভিস আর্কিটেকচারে দুই বা ততোধিক সার্ভিসের মধ্যে খুব সহজে যোগাযোগ করা যায়। সাধারণত মাইক্রোসার্ভিসে এক সার্ভিস থেকে অন্য সার্ভিসকে কল করার জন্য আমরা RestTemplate ব্যবহার করি, কিন্তু সেটি বেশ জটিল হতে পারে। এই ভিডিওতে দেখানো হয়েছে কীভাবে Feign Client ব্যবহার করে কোড না লিখে বা আইপি-পোর্ট নিয়ে চিন্তা না করেই অন্য সার্ভিসের মেথড ব্যবহার করা যায়।
মাইক্রোসার্ভিস কমিউনিকেশন এবং ফেং (Feign) এর ভূমিকা
ভিডিও রেফারেন্স: [00:40]
যখন একটি মাইক্রোসার্ভিস (যেমন: Quiz Service) অন্য একটি মাইক্রোসার্ভিসের (যেমন: Question Service) ডেটা চায়, তখন তাদের মধ্যে একটি যোগাযোগের মাধ্যম লাগে।
- সহজ ব্যাখ্যা: মনে করো তুমি একটি রেস্টুরেন্টে গিয়েছো। তুমি (Quiz Service) খাবার অর্ডার দিতে চাও। এখন খাবারটি বানাবে শেফ (Question Service)। তোমার আর শেফ-এর মাঝে যে ওয়েটার কাজ করে, সেই হলো Feign। তোমাকে রান্নাঘরে গিয়ে শেফকে খুঁজতে হবে না, শুধু ওয়েটারকে বললেই সে শেফ-এর কাছ থেকে খাবার এনে দেবে।
কঠিন শব্দের সহজ অর্থ:
-
Feign Client: এটি একটি ডিক্লারেটিভ (Declarative) ওয়েব সার্ভিস ক্লায়েন্ট। অর্থাৎ, আপনাকে শুধু বলতে হবে কোন সার্ভিস কল করবেন, বাকিটা সে নিজে করে নেবে।
-
Eureka Server: এটি একটি ফোনবুকের মতো, যেখানে সব সার্ভিসের নাম ও ঠিকানা লেখা থাকে।
ফেং ক্লায়েন্ট সেটআপ করার ধাপসমূহ
ভিডিও রেফারেন্স: [03:00]
Feign ব্যবহার করার জন্য প্রজেক্টে কিছু পরিবর্তন করতে হয়:
-
Dependency যোগ করা:
pom.xmlফাইলে Feign-এর লাইব্রেরি যোগ করতে হয়। -
Enable Feign Clients: মেইন ক্লাসে
@EnableFeignClientsঅ্যানোটেশন ব্যবহার করতে হয় যাতে স্প্রিং বুঝতে পারে এই প্রজেক্টে Feign ব্যবহার হবে। [09:55] -
Interface তৈরি করা: সরাসরি কোড না লিখে একটি ইন্টারফেস তৈরি করতে হয় যা অন্য সার্ভিসের সাথে কথা বলবে।
কোডিং এবং ইন্টারফেস তৈরি
ভিডিও রেফারেন্স: [04:12]
এখানে একটি ইন্টারফেস তৈরি করা হয়েছে যা Question Service-এর সাথে যোগাযোগ করবে।
Java
// Feign Client ইন্টারফেসের উদাহরণ
@FeignClient(value = "QUESTION-SERVICE") // এখানে সার্ভিসের নাম দিতে হয়
public interface QuizInterface {
@GetMapping("question/generate")
public ResponseEntity<List<Integer>> getQuestionsForQuiz(
@RequestParam String categoryName,
@RequestParam Integer numQuestions);
@PostMapping("question/getQuestions")
public ResponseEntity<List<QuestionWrapper>> getQuestionsFromId(
@RequestBody List<Integer> questionIds);
@PostMapping("question/getScore")
public ResponseEntity<Integer> getScore(@RequestBody List<Response> responses);
}
কোড ব্যাখ্যা:
-
@FeignClient(value = "QUESTION-SERVICE"): এই লাইনটি দিয়ে আমরা বলছি যে, আমরা Eureka সার্ভারে থাকা "QUESTION-SERVICE" নামের সার্ভিসটির সাথে কথা বলতে চাই। -
এখানে কোনো মেথড বডি (Logic) লিখতে হয় না, শুধু অন্য সার্ভিসের কন্ট্রোলারে যে মেথড আছে তার সিগনেচার বা নামটুকু দিলেই হয়।
কুইজ সার্ভিসে ফেং ব্যবহার করা
ভিডিও রেফারেন্স: [06:11]
এখন QuizService-এ আমরা সরাসরি এই ইন্টারফেসটি ইনজেক্ট করে ব্যবহার করতে পারি।
Java
// কুইজ সার্ভিসে কল করার পদ্ধতি
@Autowired
QuizInterface quizInterface;
public ResponseEntity<String> createQuiz(String category, int numQ, String title) {
// ফেং ক্লায়েন্ট ব্যবহার করে কোয়েশ্চন সার্ভিস থেকে আইডি নিয়ে আসা
List<Integer> questions = quizInterface.getQuestionsForQuiz(category, numQ).getBody();
Quiz quiz = new Quiz();
quiz.setTitle(title);
quiz.setQuestionIds(questions);
quizDao.save(quiz);
return new ResponseEntity<>("Success", HttpStatus.CREATED);
}
সহজ বিশ্লেষণ: আগে আমাদের আইপি অ্যাড্রেস বা পোর্ট নম্বর (যেমন: localhost:8081) দিয়ে কল করতে হতো। কিন্তু Feign ব্যবহারের ফলে আমরা শুধু সার্ভিসের নাম দিয়ে মেথড কল করছি। এতে কোড অনেক পরিষ্কার এবং ম্যানেজ করা সহজ হয়।
আমার বিশ্লেষণ এবং চিন্তাভাবনা
ভিডিওর মূল উদ্দেশ্য: কন্টেন্ট ক্রিয়েটর বোঝাতে চেয়েছেন যে, মাইক্রোসার্ভিসগুলোর মধ্যে সরাসরি আইপি-পোর্ট নির্ভর যোগাযোগ পরিহার করা উচিত। কারণ ক্লাউড এনভায়রনমেন্টে সার্ভিসের আইপি যেকোনো সময় বদলে যেতে পারে। Feign Client এবং Eureka ব্যবহার করলে এই ঝুঁকি থাকে না।
বাস্তবতা ও সম্ভাবনা: ১. লোকাল হোস্টিং বনাম ক্লাউড: বর্তমানে বড় বড় কোম্পানিগুলো (যেমন: Netflix) তাদের ইন্টার-সার্ভিস কমিউনিকেশনের জন্য Feign বা অনুরূপ টুল ব্যবহার করে। ২. বিকল্প: Feign ছাড়াও WebClient একটি আধুনিক এবং শক্তিশালী বিকল্প, যা অ্যাসিনক্রোনাস (Asynchronous) কাজের জন্য ভালো। তবে সহজ কাজের জন্য Feign-এর কোনো তুলনা নেই। ৩. পরামর্শ: আপনি যদি বিগিনার হন, তবে প্রথমে RestTemplate দিয়ে একবার চেষ্টা করুন, তারপর Feign-এ সুইচ করুন। তাহলে বুঝতে পারবেন Feign আপনার জীবন কতটা সহজ করে দিয়েছে!
সহজ কথা: Feign হলো মাইক্রোসার্ভিসের মধ্যে যোগাযোগের একটি স্মার্ট এবং অটোমেটিক পদ্ধতি। এটি ব্যবহার করলে আপনাকে বারবার নেটওয়ার্কিং কোড লিখতে হয় না।
[
Working with Feign | Microservice
Telusko · 81K views
](http://www.youtube.com/watch?v=FH8fUBfHARY)

মন্তব্যসমূহ
একটি মন্তব্য পোস্ট করুন
আপনার সমস্যাটি কমেন্ট করে আমাদের জানান :-d