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

এক্সপ্লোর FMZ: লেনদেনের কৌশল এবং বাস্তবের সাথে যোগাযোগের প্রোটোকল

লেখক:উদ্ভাবকগণ - ক্যোটিফিকেশন - ছোট্ট স্বপ্ন, তৈরিঃ ২০২৪-০৮-০৬ 14:13:40, আপডেটঃ ২০২৪-০৮-০৭ ১৫ঃ৩০ঃ১৩

[TOC]

img

আর্থিক বাজারের দ্রুত বিকাশ এবং পরিমাণগত লেনদেনের প্রচলনের সাথে সাথে, আরও বেশি সংখ্যক ব্যবসায়ীরা স্বয়ংক্রিয় কৌশলগুলির উপর নির্ভর করতে শুরু করেছেন। এই প্রক্রিয়ায়, কৌশলগুলির মধ্যে যোগাযোগ এবং সমন্বয় বিশেষভাবে গুরুত্বপূর্ণ হয়ে উঠেছে। FMZ (Quantitative Trading Platform) দক্ষ ট্রেডিং কৌশলগুলিকে বাস্তব ডিশের মধ্যে যোগাযোগের প্রোটোকল সরবরাহ করে ব্যবসায়ীদের কৌশলগুলিকে নির্বিঘ্নে জুড়ে এবং রিয়েল-টাইম ডেটা ভাগ করে নিতে সহায়তা করে।

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

আপনি FMZ-তে নতুন quantity trading hobbyist বা অভিজ্ঞ professional programmer, এই নিবন্ধটি আপনাকে মূল্যবান অন্তর্দৃষ্টি এবং ব্যবহারিক গাইড প্রদান করবে। আসুন আমরা একসাথে FMZ-এর শক্তিশালী বৈশিষ্ট্যগুলি আবিষ্কার করি এবং কীভাবে দক্ষ যোগাযোগ প্রোটোকলের মাধ্যমে কৌশলগত সহযোগিতা অর্জন করতে, ট্রেডিং দক্ষতা বাড়াতে এবং বাজারের সুযোগগুলি ক্যাপচার করতে পারি তা শিখুন।


চাহিদা দৃশ্য

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

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


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

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

mqtt / nats / amqp / kafka

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

যোগাযোগের কাঠামোঃ

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

ডায়াল ফাংশন

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

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

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

img

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


এফএমজেড প্ল্যাটফর্মের বাস্তব যোগাযোগ প্রোটোকল

mqtt চুক্তি

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

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

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

খবর প্রকাশ এবং সাবস্ক্রাইব করুন

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

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

# 配置端口号及远程访问IP
listener 1883 0.0.0.0
# 设置匿名访问
allow_anonymous true

তারপর ডিপ্লোয়মেন্ট কমান্ডটি চালানঃ

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("当前实盘robotId:", robotId)

    conn = Dial("mqtt://127.0.0.1:1883?topic=test_topic")
    if (!conn) {
        Log("通信失败!")
        return 
    }

    for (var i = 0; i < 10; i++) {
        // 写入
        var msg = "i: " + i + ", testQueue, robotA, robotId: " + robotId + ", time:" + _D()        
        conn.write(msg)
        Log("向testQueue写入消息:", msg)

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

        Sleep(1000)
    }    
}

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

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

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

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

উপরের কৌশলগুলি একটি বিষয়ের জন্য একটি পোস্ট, একটি সাবস্ক্রিপশন এবং একটি পরীক্ষা চালানোর জন্যঃ

img

এছাড়াও, দুটি ভার্চুয়াল ডিস্ক ব্যবহার করে একে অপরের সাথে সাবস্ক্রাইব করা যায়, বিষয়বস্তু বার্তা প্রকাশ করা যায়, যা আমরা Nats প্রোটোকলের অনুশীলন বিভাগে ব্যবহার করি।


nats চুক্তি

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

প্রতিটি চুক্তির নিজস্ব বৈশিষ্ট্য রয়েছে, এবং এখানে বিস্তারিত বিবরণ নেই।

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

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

এই ডকার কমান্ডটি স্বয়ংক্রিয়ভাবে nats মিরর ডাউনলোড করে এবং চালায়। ৪২২২ পোর্ট হল সেই পোর্ট যেখানে ক্লায়েন্টটি অ্যাক্সেস করতে চায়। মিররটি মোতায়েন করার পরে, একটি HTTP মনিটর ৮২২২ পোর্টে খোলা থাকবে।

Listening for client connections on 0.0.0.0:4222
Server is ready

nats সার্ভার টার্মিনাল মিরর কাজ শুরু করে, পোর্ট 42222 এ নজরদারি করে।

স্থানীয় ডিভাইস বাস্তব ডিস্ক কৌশল মধ্যে যোগাযোগ

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

  • কৌশল এ

    var connPub = null 
    var connSub = null
    
    function main() {
        var robotId = _G()
        Log("当前实盘robotId:", robotId)
    
        connPub = Dial("nats://admin@127.0.0.1:4222?topic=pubRobotA")
        if (!connPub) {
            Log("通信失败!")
            return 
        }
    
        connSub = Dial("nats://admin@127.0.0.1:4222?topic=pubRobotB")
        if (!connSub) {
            Log("通信失败!")
            return 
        }
    
        while (true) {
            connPub.write("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("当前实盘robotId:", robotId)
    
        connPub = Dial("nats://admin@127.0.0.1:4222?topic=pubRobotB")
        if (!connPub) {
            Log("通信失败!")
            return 
        }
    
        connSub = Dial("nats://admin@127.0.0.1:4222?topic=pubRobotA")
        if (!connSub) {
            Log("通信失败!")
            return 
        }
    
        while (true) {
            connPub.write("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()
    }
    

এই দুইটি কৌশল মূলত একই, কিন্তু একে অপরের সাথে পোস্ট, সাবস্ক্রাইব, সাবস্ক্রাইব, পোস্ট, পোস্ট, পোস্ট করা বিষয়বস্তু ভিন্ন।

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

  • ১, ব্যবহারDial()ফাংশন ক্লায়েন্ট সংযোগ সার্ভার অবজেক্ট তৈরি করেconnPubএই ভিডিওটি একটি ভিডিও বার্তার মাধ্যমে প্রকাশ করা হয়েছে।

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

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

  • ২। ব্যবহারDial()ফাংশন ক্লায়েন্ট সংযোগ সার্ভার অবজেক্ট তৈরি করেconnSubএই নিবন্ধে আপনি যেসব বিষয়ের জন্য সাবস্ক্রাইব করতে পারেন তা তুলে ধরা হলঃ

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

    পার্থক্যটা হচ্ছেtopic=pubRobotAএই বিষয়বস্তুতে, আপনি একটি সাবস্ক্রিপশন প্রয়োজন কারণ কৌশল A.pubRobotA

নীতি A-তে সাবস্ক্রিপশন, প্রকাশ এবং সংযোগের বস্তু তৈরি এবং ব্যবহারের জন্য উপরের বর্ণনার সাথে সমার্থক।

  • কৌশল A কাজ করছে

    img

  • কৌশল বি কাজ করছে

    img

এটি একটি সহজ Nats প্রোটোকল প্রয়োগের উদাহরণ যা ডিস্ক A এবং ডিস্ক B এর মধ্যে পারস্পরিক সাবস্ক্রিপশন, বার্তা প্রেরণ এবং যোগাযোগের জন্য উপলব্ধ।


amqp প্রটোকল

amqp প্রোটোকলের queue

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

প্রতিটি চুক্তির নিজস্ব বৈশিষ্ট্য রয়েছে, এবং এখানে বিস্তারিত বিবরণ নেই।

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("当前实盘robotId:", robotId)

    conn = Dial("amqp://q:admin@127.0.0.1:5672/?queue=robotA_Queue")
    if (!conn) {
        Log("通信失败!")
        return 
    }

    for (var i = 0; i < 10; i++) {
        // 读取
        Log("read:", conn.read(1000), "#FF0000")
        
        // 写入
        var msg = "i: " + i + ", testQueue, robotA, robotId: " + robotId + ", time:" + _D()        
        conn.write(msg)
        Log("向testQueue写入消息:", msg)

        Sleep(1000)
    }    
}

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

amqp প্রোটোকল ব্যবহার করে কিউয়ের লক্ষ্য করা দরকার যে, প্রকাশিত বার্তাগুলি কিউতে স্থায়ীভাবে উপস্থিত থাকে, যেমন আমরা উপরে বর্ণিত উদাহরণ কোডটি একবার চালিয়েছি। এটি কিউতে 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("当前实盘robotId:", robotId)

    conn = Dial("kafka://localhost:9092/test_topic")
    if (!conn) {
        Log("通信失败!")
        return 
    }

    for (var i = 0; i < 10; i++) {
        // 写入
        var msg = "i: " + i + ", testQueue, robotA, robotId: " + robotId + ", time:" + _D()        
        conn.write(msg)
        Log("向testQueue写入消息:", msg)

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

        Sleep(1000)
    }    
}

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

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

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

অন্যান্য কয়েকটি প্রোটোকলের মতো, প্রোটোকলের নাম দিয়ে শুরু হয়; তারপরে এর ঠিকানাটি অনুসরণ করুনঃlocalhost:9092;; তারপর "/" চিহ্নটি একটি ব্যবধান হিসাবে ব্যবহার করুন, এর পরে সাবস্ক্রাইব / পোস্টের বিষয় লিখুন, এখানে পরীক্ষার বিষয়টি সেট করা আছেtest_topic

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

img


আরো