রিসোর্স লোড হচ্ছে... লোডিং...

এফএমজেড এক্সপ্লোরিংঃ লাইভ ট্রেডিং কৌশলগুলির মধ্যে যোগাযোগ প্রোটোকলের অনুশীলন

লেখক:এফএমজেড-লিডিয়া, তৈরিঃ ২০২৪-০৮-০৮ ১০ঃ০৯ঃ২১, আপডেটঃ ২০২৪-০৯-১২ ০৯ঃ৪৬ঃ১৮

img

আর্থিক বাজারগুলির দ্রুত বিকাশ এবং পরিমাণগত ব্যবসায়ের জনপ্রিয়তার সাথে সাথে, আরও বেশি সংখ্যক ব্যবসায়ীরা ব্যবসায়ের জন্য স্বয়ংক্রিয় কৌশলগুলির উপর নির্ভর করতে শুরু করে। এই প্রক্রিয়ায়, কৌশলগুলির মধ্যে যোগাযোগ এবং সমন্বয় বিশেষভাবে গুরুত্বপূর্ণ। এফএমজেড কোয়ান্ট ট্রেডিং প্ল্যাটফর্ম ব্যবসায়ীদের কৌশল কৌশলগুলির মধ্যে একটি দক্ষ যোগাযোগ প্রোটোকল সরবরাহ করে বিরামবিহীন কৌশল ডকিং এবং রিয়েল-টাইম ডেটা শেয়ারিং অর্জন করতে সহায়তা করে।

এই নিবন্ধটি এফএমজেড প্ল্যাটফর্মে ট্রেডিং কৌশলগুলির লাইভ ট্রেডিং যোগাযোগ প্রোটোকলটি অন্বেষণ করবে, এর নকশা ধারণা, কার্যকরী বৈশিষ্ট্য এবং ব্যবহারিক অ্যাপ্লিকেশনগুলিতে সুবিধাগুলি পরিচয় করিয়ে দেবে। বিস্তারিত কেস বিশ্লেষণের মাধ্যমে, আমরা দক্ষ এবং স্থিতিশীল কৌশল যোগাযোগ অর্জনের জন্য এই প্রোটোকলটি কীভাবে ব্যবহার করব তা দেখাব এবং ট্রেডিং কৌশলগুলির কার্যকরকরণ এবং লাভের পারফরম্যান্স উন্নত করব।

আপনি যদি একটি পরিমাণগত ট্রেডিং উত্সাহী হন যা কেবলমাত্র এফএমজেড বা অভিজ্ঞ পেশাদার প্রোগ্রামার দিয়ে শুরু হয় তবে এই নিবন্ধটি আপনাকে মূল্যবান অন্তর্দৃষ্টি এবং ব্যবহারিক অপারেশন গাইড সরবরাহ করবে। আসুন আমরা এফএমজেড প্ল্যাটফর্মের শক্তিশালী ফাংশনগুলি অন্বেষণ করি এবং দক্ষ যোগাযোগ প্রোটোকলের মাধ্যমে কৌশলগুলির মধ্যে সহযোগিতা অর্জন, ট্রেডিং দক্ষতা উন্নত করা এবং বাজারের সুযোগগুলি ক্যাপচার করার উপায় শিখুন।

চাহিদা দৃশ্যকল্প

    1. মাল্টি-স্ট্র্যাটেজি সহযোগী ট্রেডিং চাহিদা দৃশ্যকল্পঃ একটি জটিল বাজার পরিবেশে, একটি একক কৌশল বিভিন্ন জরুরী অবস্থা এবং বাজার পরিবর্তন মোকাবেলা করতে সক্ষম হতে পারে না। ব্যবসায়ীরা একই সময়ে একাধিক কৌশল চালাতে চান, যেমন প্রবণতা ট্র্যাকিং কৌশল, গড় বিপরীতমুখী কৌশল, এবং সালিশ কৌশল, এবং এই কৌশলগুলিকে বাজারের তথ্য এবং ট্রেডিং সংকেত ভাগ করে নেওয়ার জন্য রিয়েল টাইমে যোগাযোগ করতে দিন, যার ফলে সামগ্রিক ট্রেডিং দক্ষতা এবং স্থিতিশীলতা উন্নত হয়।
    1. ক্রস মার্কেট আর্বিট্রেজ চাহিদা দৃশ্যকল্পঃ ব্যবসায়ীরা বিভিন্ন ট্রেডিং মার্কেটের মধ্যে সালিশ লেনদেন পরিচালনা করতে চান। উদাহরণস্বরূপ, এ-অ্যাকশন মার্কেট এবং হংকং স্টক মার্কেটের মধ্যে মূল্য পার্থক্য ব্যবহার করে সালিশ। যখন একটি নির্দিষ্ট বাজারে দামের বৈষম্য ঘটে, তখন কৌশলটি সালিশের সুযোগগুলি ক্যাপচার করার জন্য সংশ্লিষ্ট ক্রয় এবং বিক্রয় ক্রিয়াকলাপগুলি সম্পাদন করার জন্য অন্যান্য বাজারের কৌশলগুলিকে অবিলম্বে অবহিত করতে হবে।
    1. ঝুঁকি ব্যবস্থাপনা এবং হেজিং চাহিদা দৃশ্যকল্পঃ একটি কৌশল বাজারে উচ্চ ঝুঁকিপূর্ণ, উচ্চ রিটার্নযুক্ত লেনদেনগুলি সনাক্ত এবং সম্পাদনের জন্য দায়ী, অন্য কৌশলটি সামগ্রিক ঝুঁকি পর্যবেক্ষণ এবং হেজিং অপারেশন সম্পাদনের উপর দৃষ্টি নিবদ্ধ করে। উচ্চ ঝুঁকিপূর্ণ লেনদেনের সময় অত্যধিক ক্ষতি না হওয়ার বিষয়টি নিশ্চিত করার জন্য, এই দুটি কৌশলকে অবস্থানগুলি সাময়িকভাবে সামঞ্জস্য করতে এবং ঝুঁকিগুলি সময়মতো সুরক্ষিত করার জন্য রিয়েল টাইমে তথ্য যোগাযোগ এবং ভাগ করে নেওয়া দরকার।
    1. বিতরণ ব্যবসায়িক ব্যবস্থা চাহিদা দৃশ্যকল্পঃ বড় বড় ট্রেডিং প্রতিষ্ঠানগুলি ট্রেডিং সিস্টেমের ত্রুটি সহনশীলতা এবং কর্মক্ষমতা উন্নত করতে একাধিক শারীরিক সার্ভারে বিতরণকৃত ট্রেডিং সিস্টেম চালাতে চায়। সামগ্রিক ট্রেডিং সিস্টেমের স্থিতিশীলতা এবং দক্ষ অপারেশন নিশ্চিত করার জন্য এই সার্ভারগুলিতে কৌশলগুলিকে ডেটা সিঙ্ক্রোনাইজ করতে এবং যোগাযোগ প্রোটোকলগুলির মাধ্যমে ক্রিয়াকলাপ সমন্বয় করতে হবে।
    1. বাজার পর্যবেক্ষণ এবং প্রারম্ভিক সতর্কতা চাহিদা দৃশ্যকল্পঃ একটি কৌশল বাজারের গতিশীলতার রিয়েল-টাইম মনিটরিংয়ের জন্য দায়ী। যখন বাজারে বড় পরিবর্তন হয় (যেমন হঠাৎ দামের পতন বা উত্থান), কৌশলটি ঝুঁকি হ্রাস বা ট্রেডিং সুযোগগুলি দখল করার জন্য, অবস্থান বন্ধ করা, অবস্থানগুলি সামঞ্জস্য করা বা অবস্থানগুলি যুক্ত করার মতো সংশ্লিষ্ট প্রতিক্রিয়া পদক্ষেপ গ্রহণের জন্য অন্যান্য কৌশলগুলিকে দ্রুত অবহিত করতে হবে।
    1. পোর্টফোলিও কৌশল ব্যবস্থাপনা চাহিদা দৃশ্যকল্পঃ ব্যবসায়ীরা বিভিন্ন সম্পদ শ্রেণীতে বিনিয়োগ পরিচালনা করার জন্য কৌশলগুলির একটি পোর্টফোলিও ব্যবহার করে, প্রতিটি কৌশল একটি নির্দিষ্ট সম্পদ শ্রেণীতে ফোকাস করে (যেমন স্টক, বন্ড, ফিউচার ইত্যাদি) । পোর্টফোলিও বিনিয়োগের সামগ্রিক অপ্টিমাইজেশান অর্জন এবং সর্বোচ্চ রিটার্ন অর্জনের জন্য এই কৌশলগুলিকে যোগাযোগ এবং সমন্বয় করতে হবে।

এই চাহিদা দৃশ্যকল্পগুলি বাস্তব অ্যাপ্লিকেশনগুলিতে এফএমজেড ট্রেডিং কৌশল লাইভ ট্রেডিং যোগাযোগ প্রোটোকলের বিভিন্ন সম্ভাবনা এবং সুবিধা প্রদর্শন করে। কার্যকর আন্তঃ-কৌশল যোগাযোগের মাধ্যমে, ব্যবসায়ীরা জটিল বাজারের পরিবেশের সাথে আরও ভালভাবে মোকাবিলা করতে, ট্রেডিং কৌশলগুলি অনুকূল করতে এবং ট্রেডিং দক্ষতা এবং মুনাফা উন্নত করতে পারে।

এফএমজেড ইনক্যাপসুলড কমিউনিকেশন প্রোটোকল এবং ডায়াল ফাংশন

লাইভ ট্রেডিংয়ের মধ্যে যোগাযোগের প্রয়োজনীয়তাগুলি বোঝার পরে, আমাদের এই প্রয়োজনীয়তাগুলি কীভাবে বাস্তবায়ন করতে হবে তা বিবেচনা করতে হবে। এটি লাইভ ট্রেডিং এ এর সাথে লাইভ ট্রেডিং বি এর সাথে তথ্য বিনিময় করার আশায় লাইভ ট্রেডিং এর চেয়ে বেশি কিছু নয়। যদিও প্রয়োজনীয়তাগুলি সহজ বলে মনে হচ্ছে, যোগাযোগ প্রোটোকলগুলির একটি সেট ব্যবহার করার সময় বিভিন্ন বিবরণে সম্মত হওয়া দরকার। এফএমজেড বেশ কয়েকটি জনপ্রিয় যোগাযোগ প্রোটোকলকে ক্যাপসুল করেছে।

mqtt / nats / amqp / kafka

যোগাযোগ স্থাপত্য

যোগাযোগ স্থাপত্য হলঃ

  • সার্ভার (প্রক্সি) । একটি সার্ভার যা একটি যোগাযোগ প্রোটোকল চালায় গ্রাহক এবং প্রকাশকদের মধ্যে বার্তা রিলে করার জন্য প্রয়োজন। এই সার্ভারটি ডকার সিস্টেমে স্থানীয়ভাবে স্থাপন করা যেতে পারে (স্থানীয় লাইভ ট্রেডিং যোগাযোগের জন্য) বা একটি দূরবর্তী পরিষেবা হিসাবে (ক্রস সার্ভার লাইভ ট্রেডিং যোগাযোগের জন্য) ।
  • ক্লায়েন্ট (অ্যাবস্ক্রাইবার, প্রকাশক) । এফএমজেডের কৌশল লাইভ ট্রেডিং প্রোগ্রামটি একটি যোগাযোগ প্রোটোকলের ক্লায়েন্ট হিসাবে বোঝা যায়। কৌশল রিয়েল-টাইম প্রোগ্রামটি প্রকাশক (পাব) বা গ্রাহক (সাব) হতে পারে।

ডায়াল ফাংশন

FMZ প্ল্যাটফর্মে এই প্রোটোকলগুলি প্রয়োগ করার সময় এটি সহজেই বোঝা যায় যে mqtt / nats / amqp / kafkapro-Dial()ফাংশন, এবংDial()ফাংশনটি বার্তা প্রকাশ এবং সাবস্ক্রাইব করার জন্য ব্যবহৃত হয়। এই প্রকাশিত বার্তাগুলি প্রোটোকল সার্ভারের মাধ্যমে সাবস্ক্রাইব করা লাইভ ট্রেডিংয়ে প্রক্সি (রিলে) করা হয়, তাই প্রথমে একটি প্রোটোকল সার্ভার চালানো আবশ্যক। প্রদর্শনের জন্য, আমরা নিম্নলিখিত উদাহরণগুলিতে বিভিন্ন প্রোটোকল সার্ভার ইমেজ স্থাপনার ব্যবহার করি।

এপিআই ডকুমেন্টেশন বিভাগে ডায়াল ফাংশনঃhttps://www.fmz.com/syntax-guide#fun_dial

ডকার ইমেজ স্থাপন করার আগে, প্রথমে ডকার সফটওয়্যার ইনস্টল করতে ভুলবেন না।

img

এরপরে, আসুন আমরা FMZ দ্বারা সমর্থিত যোগাযোগ প্রোটোকল অ্যাপ্লিকেশনগুলি অন্বেষণ এবং অনুশীলন করি।

এফএমজেড প্ল্যাটফর্ম লাইভ ট্রেডিং যোগাযোগ প্রোটোকল অনুশীলন

mqtt প্রোটোকল

এমকিউটিটি (মেসেজ ক্যুয়েজিং টেলিমেট্রি ট্রান্সপোর্ট) একটি হালকা ওজনের বার্তা সংক্রমণ প্রোটোকল যা নিম্ন ব্যান্ডউইথ, উচ্চ বিলম্ব বা অ-নির্ভরযোগ্য নেটওয়ার্ক পরিবেশের জন্য বিশেষভাবে উপযুক্ত। এটি 1999 সালে আইবিএমের অ্যান্ডি স্ট্যানফোর্ড-ক্লার্ক এবং আর্লেন নিপার দ্বারা প্রস্তাবিত হয়েছিল এবং পরে এটি একটি আইএসও স্ট্যান্ডার্ড (আইএসও / আইইসি পিআরএফ 20922) হয়ে ওঠে।

এমকিউটিটি প্রোটোকলের প্রধান বৈশিষ্ট্যঃ প্রকাশ / সাবস্ক্রাইব মোড

  • প্রকাশনাঃ বার্তা প্রযোজক বার্তাটি বিষয়বস্তুতে পাঠায়।
  • সাবস্ক্রিপশনঃ একটি বার্তা গ্রাহক আগ্রহের একটি বিষয়ে সাবস্ক্রাইব করেন, যার ফলে সেই বিষয়ে প্রকাশিত বার্তাগুলি পান।
  • ব্রোকারঃ এমকিউটিটি বার্তা পাঠানোর জন্য একটি মধ্যস্থতাকারী হিসাবে একটি বার্তা ব্রোকার ব্যবহার করে, প্রকাশক এবং গ্রাহকদের মধ্যে বিচ্ছিন্নতা নিশ্চিত করে।

বার্তা প্রকাশ এবং সাবস্ক্রিপশন

যেহেতু আমরা এমকিউটিটি প্রক্সি সার্ভার স্থাপন করতে এমকিউটিটি প্রোটোকল সমর্থন করে এমন সফ্টওয়্যারটির ডকার ইমেজ (eclipse-mosquitto image) ব্যবহার করি, তাই আমরা ডকারটি আগেই ইনস্টল করেছি এবং পরে বিস্তারিত জানাব না।

ইমেজ স্থাপন করার জন্য কমান্ড চালানোর আগে, আমরা একটি প্রক্সি সার্ভার কনফিগারেশন ফাইল লিখতে হবেmosquitto.conf.

# Configure port number and remote access IP
listener 1883 0.0.0.0
# Setting up anonymous access
allow_anonymous true

তারপর deployment কমান্ডটি চালানঃ

docker run --rm -p 1883:1883 -v ./mosquitto.conf:/mosquitto/config/mosquitto.conf eclipse-mosquitto

প্রক্সি সার্ভারের ইমেজ চালানোর পরে, নিম্নলিখিত প্রদর্শিত হয়ঃ

1723012640: mosquitto version 2.0.18 starting
1723012640: Config loaded from /mosquitto/config/mosquitto.conf.
1723012640: Opening ipv4 listen socket on port 1883.
1723012640: mosquitto version 2.0.18 running

তারপর আমরা কৌশলটি পরীক্ষা করে তা বাস্তবায়নে আনতে পারি।

var conn = null

function main() {
    LogReset(1)
    var robotId = _G()
    Log("Current live trading robotId:", robotId)

    conn = Dial("mqtt://127.0.0.1:1883?topic=test_topic")
    if (!conn) {
        Log("Communication failure!")
        return 
    }

    for (var i = 0; i < 10; i++) {
        // Write
        var msg = "i: " + i + ", testQueue, robotA, robotId: " + robotId + ", time:" + _D()        
        conn.write(msg)
        Log("Write a message to testQueue:", msg)

        // Read
        Log("read:", conn.read(1000), "#FF0000")

        Sleep(1000)
    }    
}

function onexit() {
    conn.close()
    Log("close conn")
}

কৌশল কোডে ডায়াল ফাংশনের প্রধান ব্যবহার হলঃ

Dial("mqtt://127.0.0.1:1883?topic=test_topic")

ডায়াল ফাংশনের স্ট্রিং প্যারামিটার দিয়ে শুরু হয়mqtt://, যা প্রোটোকলের নাম, এর পরে শ্রবণ ঠিকানা এবং পোর্ট রয়েছে। প্রতীক ? এর পরে সাবস্ক্রিপশন / প্রকাশের বিষয়ের নাম রয়েছে। এখানে পরীক্ষিত বিষয়ের নামটি হলঃtest_topic.

উপরের কৌশলটি একই সময়ে একটি বিষয় প্রকাশ করে এবং সাবস্ক্রাইব করে। চলমান পরীক্ষাটি চিত্রটিতে দেখানো হয়েছেঃ

img

আমরা একে অপরের সাবস্ক্রাইব এবং বিষয় তথ্য প্রকাশ করতে দুটি লাইভ ট্রেডিং ব্যবহার করতে পারি। আমরা nats প্রোটোকল অনুশীলন বিভাগে যেমন একটি উদাহরণ ব্যবহার করি, এবং অন্যান্য প্রোটোকলগুলিতে এই পদ্ধতিটি পুনরাবৃত্তি করব না।

প্রোটোকল

এনএটিএস প্রোটোকল একটি সহজ, পাঠ্য-ভিত্তিক প্রকাশ / সাবস্ক্রাইব স্টাইল প্রোটোকল। ক্লায়েন্ট gnatsd (NATS সার্ভার) এর সাথে সংযোগ স্থাপন করে এবং gnatsd এর সাথে যোগাযোগ করে। যোগাযোগটি সাধারণ টিসিপি / আইপি সকেটের উপর ভিত্তি করে এবং অপারেশনগুলির একটি খুব ছোট সেট সংজ্ঞায়িত করে। নিউলাইন সমাপ্তি নির্দেশ করে। বাইনারি বার্তা ফর্ম্যাট ব্যবহার করে traditionalতিহ্যবাহী বার্তা যোগাযোগ সিস্টেমের বিপরীতে, পাঠ্য-ভিত্তিক এনএটিএস প্রোটোকল ক্লায়েন্ট বাস্তবায়নকে খুব সহজ করে তোলে এবং বিভিন্ন প্রোগ্রামিং ভাষা বা স্ক্রিপ্টিং ভাষায় সহজেই বাস্তবায়ন করা যেতে পারে।

প্রতিটি প্রোটোকলের নিজস্ব বৈশিষ্ট্য রয়েছে। আপনি নির্দিষ্ট নথি এবং উপকরণগুলি উল্লেখ করতে পারেন, যা এখানে বিশদভাবে ব্যাখ্যা করা হবে না।

NATS প্রোটোকল সার্ভার স্থাপন করুনঃ

ডকার রান name nats rm -p 4222:4222 -p 8222:8222 nats http_port 8222 auth admin

এই ডকার কমান্ডটি স্বয়ংক্রিয়ভাবে nats চিত্রটি ডাউনলোড করবে এবং চালাবে, এবং পোর্ট 4222 হল সেই পোর্ট যা ক্লায়েন্টকে অ্যাক্সেস করতে হবে। চিত্রটি স্থাপন করার পরে একটি http মনিটরও 8222 পোর্টে খোলা হবে।

Listening for client connections on 0.0.0.0:4222
Server is ready

Nats সার্ভার ইমেজ চালানো শুরু, পোর্ট 4222 উপর শুনতে.

স্থানীয় ডিভাইস লাইভ ট্রেডিং কৌশলগুলির মধ্যে যোগাযোগ

আমাদের দুটি কৌশল (লাইভ ট্রেডিং) তৈরি করতে হবে, আসুন তাদের কৌশল A এবং কৌশল B নামকরণ করি। এই দুটি কৌশলগুলির কোডগুলি মূলত একই। এগুলি জাভাস্ক্রিপ্টে লেখা হয়েছে, যা এফএমজেড প্ল্যাটফর্মে ব্যবহারের জন্য সবচেয়ে সহজ ভাষা।

  • কৌশল A
var connPub = null 
var connSub = null

function main() {
    var robotId = _G()
    Log("Current live trading robotId:", robotId)

    connPub = Dial("nats://admin@127.0.0.1:4222?topic=pubRobotA")
    if (!connPub) {
        Log("Communication failure!")
        return 
    }

    connSub = Dial("nats://admin@127.0.0.1:4222?topic=pubRobotB")
    if (!connSub) {
        Log("Communication failure!")
        return 
    }

    while (true) {
        connPub.write("Message posted by robotA, robotId: " + robotId + ", time:" + _D())
        var msgRead = connSub.read(10000)
        if (msgRead) {
            Log("msgRead:", msgRead)
        }

        LogStatus(_D())
        Sleep(10000)
    }
}

function onexit() {
    connPub.close()
    connSub.close()
}
  • কৌশল বি
var connPub = null 
var connSub = null

function main() {
    var robotId = _G()
    Log("Current live trading robotId:", robotId)

    connPub = Dial("nats://admin@127.0.0.1:4222?topic=pubRobotB")
    if (!connPub) {
        Log("Communication failure!")
        return 
    }

    connSub = Dial("nats://admin@127.0.0.1:4222?topic=pubRobotA")
    if (!connSub) {
        Log("Communication failure!")
        return 
    }

    while (true) {
        connPub.write("Message posted by robotB, robotId: " + robotId + ", time:" + _D())
        var msgRead = connSub.read(10000)
        if (msgRead) {
            Log("msgRead:", msgRead)
        }

        LogStatus(_D())
        Sleep(10000)
    }
}

function onexit() {
    connPub.close()
    connSub.close()
}

এই দুটি কৌশল প্রায় একই, তবে তারা একে অপরকে প্রকাশ এবং সাবস্ক্রাইব করে এবং সাবস্ক্রাইব করা বিষয়, প্রকাশিত বিষয় এবং প্রকাশিত তথ্য আলাদা।

উদাহরণস্বরূপ বি কৌশল নিন:

    1. ব্যবহার করুনDial()ক্লায়েন্ট সংযোগ সার্ভার বস্তু তৈরি করার ফাংশনconnPubবিষয়বস্তু বার্তা প্রকাশের জন্যঃ

var connPub = ডায়াল করুন127.0.0.1:4222?topic=pubRobotB”)

ডায়াল ফাংশনের প্যারামিটার স্ট্রিং দিয়ে শুরু হয়nats://এটি নির্দেশ করে যে যোগাযোগের জন্য NATS প্রোটোকল ব্যবহার করা হয়।adminহল সাধারণ যাচাইকরণ তথ্যauth adminডকার ইমেজ স্থাপন করার সময় সেট করা হয়। নিম্নলিখিত বিষয়বস্তু পৃথক করতে অক্ষর @ ব্যবহার করা হয়। তারপর সেবা ঠিকানা এবং পোর্ট আছে127.0.0.1:4222অবশেষে, প্রকাশ/অনুমোদনের বিষয় রয়েছেঃtopic=pubRobotBলক্ষ্য করুন যে ? চিহ্নটি পূর্ববর্তী ঠিকানা থেকে পৃথক করার জন্য ব্যবহৃত হয়।

    1. ব্যবহার করুনDial()ক্লায়েন্ট সংযোগ সার্ভার বস্তু তৈরি করার ফাংশনconnSubবিষয় বার্তার জন্য সাবস্ক্রিপশনঃ

var connSub = ডায়াল করুন127.0.0.1:4222?topic=pubRobotA”)

পার্থক্যটা হচ্ছেtopic=pubRobotA, কারণ আমরা বিষয় সাবস্ক্রাইব করতে হবেpubRobotAযেখানে কৌশল A তথ্য পাঠায়।

কৌশল A-তে সাবস্ক্রিপশন এবং প্রকাশনার সংযোগ বস্তু তৈরি এবং ব্যবহার উপরে বর্ণিত হিসাবে একই।

  • কৌশল A চালানো হয়

img

  • কৌশল বি চালায়

img

এইভাবে, NATS প্রোটোকল অ্যাপ্লিকেশনের একটি সহজ উদাহরণ বাস্তবায়িত হয় যেখানে লাইভ ট্রেডিং এ এবং লাইভ ট্রেডিং বি একে অপরের সাথে যোগাযোগের জন্য বার্তাগুলি সাবস্ক্রাইব করে এবং প্রকাশ করে।

amqp প্রটোকল

amqp প্রোটোকল কিউ

অ্যাসিনক্রোন যোগাযোগে, বার্তাটি অবিলম্বে রিসিভারে পৌঁছবে না, তবে এটি একটি কন্টেইনারে সংরক্ষণ করা হবে। যখন নির্দিষ্ট শর্ত পূরণ করা হবে, তখন বার্তাটি কন্টেইনার দ্বারা রিসিভারে প্রেরণ করা হবে। এই কন্টেইনারটি বার্তা সারি। এই ফাংশনটি সম্পূর্ণ করতে, উভয় পক্ষ এবং কন্টেইনার এবং এর উপাদানগুলিকে ইউনিফাইড চুক্তি এবং নিয়ম মেনে চলতে হবে। এএমকিউপি এমন একটি প্রোটোকল। বার্তা প্রেরক এবং রিসিভার উভয়ই এই প্রোটোকল মেনে চলার মাধ্যমে অ্যাসিনক্রোন যোগাযোগ বাস্তবায়ন করতে পারে। এই প্রোটোকলটি বার্তার বিন্যাস এবং কাজের পদ্ধতি নির্ধারণ করে।

প্রতিটি প্রোটোকলের নিজস্ব বৈশিষ্ট্য রয়েছে। আপনি নির্দিষ্ট নথি এবং উপকরণগুলি উল্লেখ করতে পারেন, যা এখানে বিশদভাবে ব্যাখ্যা করা হবে না।

amqp প্রোটোকল সার্ভার স্থাপন করুনঃ

docker run rm hostname my-rabbit name rabbit -p 5672:5672 -p 15672:15672 -e RABBITMQ_DEFAULT_USER=q -e RABBITMQ_DEFAULT_PASS=admin rabbitmq:3-management

ডকার ইমেজ স্থাপন করার সময়, এটি স্বয়ংক্রিয়ভাবে ডাউনলোড এবং স্থাপন করবে, এবং এটি সম্পন্ন হলে এটি প্রদর্শন করবেঃ

2024-08-06 09:02:46.248936+00:00 [info] <0.9.0> Time to start RabbitMQ: 15569 ms

সার্ভার ইমেজটি স্থাপন করার পরে, একটি পরীক্ষার উদাহরণ লিখুনঃ

var conn = null

function main() {
    LogReset(1)
    var robotId = _G()
    Log("Current live trading robotId:", robotId)

    conn = Dial("amqp://q:admin@127.0.0.1:5672/?queue=robotA_Queue")
    if (!conn) {
        Log("Communication failure!")
        return 
    }

    for (var i = 0; i < 10; i++) {
        // Read
        Log("read:", conn.read(1000), "#FF0000")
        
        // Write
        var msg = "i: " + i + ", testQueue, robotA, robotId: " + robotId + ", time:" + _D()        
        conn.write(msg)
        Log("Write a message to testQueue:", msg)

        Sleep(1000)
    }    
}

function onexit() {
    conn.close()
    Log("close conn")
}

এএমকিউপি প্রোটোকল সারি ব্যবহার করার সময়, দয়া করে নোট করুন যে প্রকাশিত বার্তাগুলি সারিতে অব্যাহত থাকবে। উদাহরণস্বরূপ, যদি আমরা উপরের উদাহরণ কোডটি চালাই, 10 টি বার্তা সারিতে লেখা হবে। তারপর যখন আমরা এটি দ্বিতীয়বার চালাই, আমরা দেখতে পাচ্ছি যে প্রথম লিখিত বার্তাটি পড়ার সময় আবার পড়া হবে। যেমন চিত্রটিতে দেখানো হয়েছেঃ

img

আমরা দেখতে পাচ্ছি যে স্ক্রিনশটে লাল তীর দ্বারা নির্দেশিত দুটি লগ বার্তাগুলির সময় অসঙ্গতিপূর্ণ। কারণ হল যে লাল বার্তাটি সেই বার্তা যা প্রথম কৌশল কোডটি চালানোর সময় সারিটিতে পড়া এবং লেখা হয়েছিল।

এই বৈশিষ্ট্যের উপর ভিত্তি করে, কিছু প্রয়োজনীয়তা পূরণ করা যেতে পারে। উদাহরণস্বরূপ, কৌশল পুনরায় চালু করার পরে, রেকর্ড করা বাজার তথ্য এখনও শুরু গণনা এবং অন্যান্য ক্রিয়াকলাপের জন্য কিউ থেকে প্রাপ্ত করা যেতে পারে।

কাফকা প্রোটোকল

অ্যাপাচি কাফকা একটি বিতরণকৃত ডেটা স্টোর যা রিয়েল টাইমে স্ট্রিমিং ডেটা গ্রহন এবং প্রক্রিয়া করার জন্য অনুকূলিত। স্ট্রিমিং ডেটা এমন ডেটা যা হাজার হাজার ডেটা উত্স দ্বারা অবিচ্ছিন্নভাবে উত্পন্ন হয়, প্রায়শই একযোগে ডেটা রেকর্ড প্রেরণ করে। স্ট্রিমিং প্ল্যাটফর্মের এই অবিচ্ছিন্ন প্রবাহকে পরিচালনা করতে হবে, এটি ধারাবাহিকভাবে এবং ধারাবাহিকভাবে প্রক্রিয়া করে।

কাফকা তার ব্যবহারকারীদের জন্য তিনটি প্রধান ফাংশন প্রদান করেঃ

  • রেকর্ডের প্রবাহ প্রকাশ এবং সাবস্ক্রাইব করা
  • রেকর্ডের একটি স্ট্রিম কার্যকরভাবে সঞ্চয় করুন যাতে তারা তৈরি করা হয়েছিল
  • রিয়েল টাইমে রেকর্ড স্ট্রিম প্রক্রিয়াকরণ

কাফকা মূলত রিয়েল-টাইম স্ট্রিমিং ডেটা পাইপলাইন এবং অ্যাপ্লিকেশনগুলি তৈরি করতে ব্যবহৃত হয় যা ডেটা স্ট্রিমগুলিতে অভিযোজিত হয়। এটি বার্তা, স্টোরেজ এবং স্ট্রিম প্রসেসিংয়ের ক্ষমতা একত্রিত করে এবং historicalতিহাসিক এবং রিয়েল-টাইম ডেটা সঞ্চয় করতে পারে।

বার্তা প্রকাশ এবং সাবস্ক্রিপশন

কাফকা প্রক্সির ডকার ইমেজ স্থাপন করুনঃ

docker run --rm --name kafka-server --hostname kafka-server -p 9092:9092 -p 9093:9093 \
        -e KAFKA_CFG_NODE_ID=0 \
        -e KAFKA_CFG_PROCESS_ROLES=controller,broker \
        -e KAFKA_CFG_LISTENERS=PLAINTEXT://0.0.0.0:9092,CONTROLLER://0.0.0.0:9093 \
        -e KAFKA_CFG_ADVERTISED_LISTENERS=PLAINTEXT://localhost:9092 \
        -e KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP=CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT \
        -e KAFKA_CFG_CONTROLLER_QUORUM_VOTERS=0@kafka-server:9093 \
        -e KAFKA_CFG_CONTROLLER_LISTENER_NAMES=CONTROLLER \
        bitnami/kafka:latest

পরীক্ষার কোড ব্যবহার করে পরীক্ষাঃ

var conn = null

function main() {
    LogReset(1)
    var robotId = _G()
    Log("Current live trading robotId:", robotId)

    conn = Dial("kafka://localhost:9092/test_topic")
    if (!conn) {
        Log("Communication failure!")
        return 
    }

    for (var i = 0; i < 10; i++) {
        // Write
        var msg = "i: " + i + ", testQueue, robotA, robotId: " + robotId + ", time:" + _D()        
        conn.write(msg)
        Log("Write a message to testQueue:", msg)

        // Read
        Log("read:", conn.read(1000), "#FF0000")

        Sleep(1000)
    }    
}

function onexit() {
    conn.close()
    Log("close conn")
}

আসুন দেখি কিভাবে ডায়াল ফাংশনে বার্তা প্রকাশ এবং সাবস্ক্রাইব করার জন্য কাফকা প্রোটোকল ব্যবহার করা যায়।

Dial("kafka://localhost:9092/test_topic")

অন্যান্য প্রোটোকলগুলির মতো, প্রথম অংশটি প্রোটোকলের নাম। তারপরে এটি শ্রবণ ঠিকানা দ্বারা অনুসরণ করা হয়ঃlocalhost:9092. তারপরে একটি বিভাজক হিসাবে প্রতীক / ব্যবহার করুন, এর পরে সাবস্ক্রিপশন / প্রকাশের বিষয়। এখানে পরীক্ষার বিষয়টি সেট করা আছেtest_topic.

পরীক্ষার ফলাফল:

img


আরো