সরাসরি প্রধান সামগ্রীতে চলে যান

মাইক্রোসার্ভিসে ফেং (Feign) ক্লায়েন্ট ব্যবহার করে সহজে যোগাযোগ

হ্যালো! আজকের এই আলোচনায় আমরা শিখবো কীভাবে মাইক্রোসার্ভিস আর্কিটেকচারে দুই বা ততোধিক সার্ভিসের মধ্যে খুব সহজে যোগাযোগ করা যায়। সাধারণত মাইক্রোসার্ভিসে এক সার্ভিস থেকে অন্য সার্ভিসকে কল করার জন্য আমরা RestTemplate ব্যবহার করি, কিন্তু সেটি বেশ জটিল হতে পারে। এই ভিডিওতে দেখানো হয়েছে কীভাবে Feign Client ব্যবহার করে কোড না লিখে বা আইপি-পোর্ট নিয়ে চিন্তা না করেই অন্য সার্ভিসের মেথড ব্যবহার করা যায়।


মাইক্রোসার্ভিস কমিউনিকেশন এবং ফেং (Feign) এর ভূমিকা

ভিডিও রেফারেন্স: [00:40]

যখন একটি মাইক্রোসার্ভিস (যেমন: Quiz Service) অন্য একটি মাইক্রোসার্ভিসের (যেমন: Question Service) ডেটা চায়, তখন তাদের মধ্যে একটি যোগাযোগের মাধ্যম লাগে।

  • সহজ ব্যাখ্যা: মনে করো তুমি একটি রেস্টুরেন্টে গিয়েছো। তুমি (Quiz Service) খাবার অর্ডার দিতে চাও। এখন খাবারটি বানাবে শেফ (Question Service)। তোমার আর শেফ-এর মাঝে যে ওয়েটার কাজ করে, সেই হলো Feign। তোমাকে রান্নাঘরে গিয়ে শেফকে খুঁজতে হবে না, শুধু ওয়েটারকে বললেই সে শেফ-এর কাছ থেকে খাবার এনে দেবে।

কঠিন শব্দের সহজ অর্থ:

  • Feign Client: এটি একটি ডিক্লারেটিভ (Declarative) ওয়েব সার্ভিস ক্লায়েন্ট। অর্থাৎ, আপনাকে শুধু বলতে হবে কোন সার্ভিস কল করবেন, বাকিটা সে নিজে করে নেবে।

  • Eureka Server: এটি একটি ফোনবুকের মতো, যেখানে সব সার্ভিসের নাম ও ঠিকানা লেখা থাকে।


ফেং ক্লায়েন্ট সেটআপ করার ধাপসমূহ

ভিডিও রেফারেন্স: [03:00]

Feign ব্যবহার করার জন্য প্রজেক্টে কিছু পরিবর্তন করতে হয়:

  1. Dependency যোগ করা: pom.xml ফাইলে Feign-এর লাইব্রেরি যোগ করতে হয়।

  2. Enable Feign Clients: মেইন ক্লাসে @EnableFeignClients অ্যানোটেশন ব্যবহার করতে হয় যাতে স্প্রিং বুঝতে পারে এই প্রজেক্টে Feign ব্যবহার হবে। [09:55]

  3. 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)

মন্তব্যসমূহ

এই ব্লগটি থেকে জনপ্রিয় পোস্টগুলি

সিজ্জিন (Sijjin) vs ইল্লিয়িন (Illiyin) পার্থক্য Difference

Sijjin (سِجِّين) এবং Illiyin (عِلِّيِّين) —এ দুটি শব্দ কুরআনে এসেছে এবং দুটোই মানুষের আমলনামা সংরক্ষণ সম্পর্কিত স্থানকে নির্দেশ করে। ১. সিজ্জিন (Sijjin) সিজ্জিন হলো পাপীদের (কাফের, মুনাফিক ও দুরাচারীদের) আমলনামা সংরক্ষণের স্থান। এটি সাত তলদেশের নীচে এক কারাগার বা অন্ধকার জগতে অবস্থিত বলে উল্লেখ রয়েছে। সূরা আল-মুতাফফিফীন (৮৩:৭-৯) তে বলা হয়েছে: "كَلَّا إِنَّ كِتَابَ الْفُجَّارِ لَفِي سِجِّينٍ ۝ وَمَا أَدْرَاكَ مَا سِجِّينٌ ۝ كِتَابٌ مَرْقُومٌ" অর্থ: "না, পাপীদের আমলনামা সিজ্জিনে সংরক্ষিত। তুমি কি জানো, সিজ্জিন কী? এটি এক লিখিত দলিল।" সিজ্জিনকে একটি কারাগার, সংকীর্ণ স্থান, বা নিচের স্তরে অবস্থিত এক অন্ধকার দুনিয়া হিসেবে ব্যাখ্যা করা হয়। ২. ইল্লিয়িন (Illiyin) ইল্লিয়িন হলো সৎকর্মশীলদের (মুমিন ও নেককারদের) আমলনামা সংরক্ষণের স্থান । এটি সপ্তম আসমানের ওপরে সংরক্ষিত এক সম্মানিত স্থান। সূরা আল-মুতাফফিফীন (৮৩:১৮-২১) তে বলা হয়েছে: "كَلَّا إِنَّ كِتَابَ الْأَبْرَارِ لَفِي عِلِّيِّينَ ۝ وَمَا أَدْرَاكَ مَا عِلِّيُّونَ ۝ كِتَابٌ مَرْقُومٌ ۝ يَش...

তারাবিহ সমগ্র - প্রথম আলো

রামাদান ২০২৪ উপলক্ষে প্রথম আলোর নিয়মিত আয়োজন - খতমে তারাবিহ'র সূরা গুলো নিয়ে সংক্ষিপ্ত আলোচনা'র লিংক  নিচে দেওয়া হলো।  লিংকে ক্লিক করলেই আপনাকে আলোচনা তে নিয়ে যাবে। তারাবিহ: ১ | একটি খুন ও গাভি নিয়ে বনি ইসরাইলের বাড়াবাড়ি তারাবিহ: ২ | নারীর মর্যাদা ও অধিকার এবং অলৌকিক তিন ঘটনা তারাবিহ: ৩ | যে ১৪ নারীকে বিয়ে করা হারাম তারাবিতে: ১২ | মহানবী (সা.)–এর আকাশভ্রমণ এবং আসহাবে কাহাফের কাহিনি

রেডমি নোট ৯ এর বিস্তারিত | Redmi Note 9 in Bangla

৩০ এপ্রিল, ২০২০ এ শাওমির ঘোষনা আসে এই ফোনটি নিয়ে। কিন্তু ফোনটি মার্কেটে আসে মে মাসের শেষের দিকে৷ করোনার কারনে ফোনটি বাংলাদেশে আসতে আরো সময় নেয়। বর্তমানে বাংলাদেশে আন অফিশিয়াল ভাবে ফোনটি পাওয়া যাচ্ছে৷ বাংলাদেশে অফিশিয়াল ভাবে এখনো ফোনটি আসার তথ্য নেয়৷ চলুন ফোনটি নিয়ে বিস্তারিত আলোচনা করা যাক। শাওমি নোট সিরিজের ফোন বের করে এদের রেডমি নামে সাব ব্যান্ড৷ এদের কাজ হল এই নোট সিরিজ নিয়ে কাজ করা৷ প্রতিবছর নোট সিরিজের ১/২ টা ফোন বাজারে আসে। সাথে সেই ফোন গুলার বিভিন্ন ভার্সন (যেমন - র‍্যাম ও রমের ভিত্তিতে) বাজারে আসে। এই বছরও তারা রেডমি সিরিজের নোট ৯ বাজারে আনে। এই বছর হয়তো এই সিরিজের আরো ফোন বাজারে আসবে। ডিস্পলেঃ ফোনটির ডিসপ্লে সাইজ ৬.৫৩ ইঞ্চি। এতে আইপিএস এলসিডি ডিসপ্লে ব্যবহার করা হয়েছে। এই ফোনের ডিসপ্লে প্রটেকশন হিসেবে আছে গরিলা গ্লাস ফাইভ। স্ক্রিন আর ফোনের বডির অনুপাত প্রায় ৮৩.৫%। এই ফোনের ডিসপ্লে ফুলএইচডি মানে ১০৮০পি। এই ডিস্পলের দৈর্ঘ্য ১৯.৫ একক এবং প্রস্থ হল ৯ একক। এত বড় ফোনের কারনে এই ফোনের পিপি আই ডেনসিটি ৩৯৫। যা একটু কম। প্লাটফর্মঃ এই ফোনের অপারেটিং সিস্টেম এন্ড্রয়েড ১০ এবং এর...