avatar of 发明者量化-小小梦 发明者量化-小小梦
پر توجہ دیں نجی پیغام
4
پر توجہ دیں
1271
پیروکار

FMZ کی تلاش: حقیقی تجارتی حکمت عملیوں کے درمیان مواصلاتی پروٹوکول کی مشق

میں تخلیق کیا: 2024-08-06 14:13:40, تازہ کاری: 2024-11-05 17:50:35
comments   0
hits   1158

[TOC]

FMZ کی تلاش: حقیقی تجارتی حکمت عملیوں کے درمیان مواصلاتی پروٹوکول کی مشق

مالیاتی منڈیوں کی تیز رفتار ترقی اور مقداری تجارت کی مقبولیت کے ساتھ، زیادہ سے زیادہ تاجر تجارت کے لیے خودکار حکمت عملیوں پر انحصار کرنے لگے ہیں۔ اس عمل میں، حکمت عملیوں کے درمیان رابطے اور ہم آہنگی خاص طور پر اہم ہے۔ FMZ (Quantitative Trading Platform) حقیقی تجارتی حکمت عملیوں کے درمیان ایک موثر مواصلاتی پروٹوکول فراہم کرکے تاجروں کو بغیر کسی رکاوٹ کے حکمت عملی کے انضمام اور حقیقی وقت میں ڈیٹا شیئرنگ حاصل کرنے میں مدد کرتا ہے۔

یہ مضمون FMZ پلیٹ فارم میں تجارتی حکمت عملیوں کے ریئل ٹائم کمیونیکیشن پروٹوکول کو گہرائی میں تلاش کرے گا، اور اس کے ڈیزائن کا تصور، عملی خصوصیات اور عملی ایپلی کیشنز میں فوائد کو متعارف کرائے گا۔ کیس کے تفصیلی تجزیہ کے ذریعے، ہم یہ دکھائیں گے کہ اس پروٹوکول کو کس طرح موثر اور مستحکم حکمت عملی مواصلات کے حصول اور تجارتی حکمت عملیوں کے نفاذ اور منافع کو بہتر بنانے کے لیے استعمال کیا جائے۔

چاہے آپ ایک مقداری تجارت کے شوقین ہیں جو ابھی FMZ کے ساتھ شروعات کر رہے ہیں، یا ایک تجربہ کار پیشہ ور پروگرامر، یہ مضمون آپ کو قیمتی بصیرتیں اور عملی آپریشن گائیڈ فراہم کرے گا۔ آئیے FMZ کے طاقتور افعال کو دریافت کریں اور سیکھیں کہ کس طرح موثر مواصلاتی پروٹوکولز کے ذریعے حکمت عملیوں کے درمیان تعاون حاصل کیا جائے، تجارتی کارکردگی کو بہتر بنایا جائے اور مارکیٹ کے مواقع کو حاصل کیا جائے۔


مطالبہ کا منظرنامہ

    1. کثیر حکمت عملی باہمی تجارت مطالبہ کا منظرنامہ: ایک پیچیدہ مارکیٹ کے ماحول میں، ایک ہی حکمت عملی مختلف ہنگامی حالات اور مارکیٹ کی تبدیلیوں سے نمٹنے کے قابل نہیں ہوسکتی ہے۔ تاجر ایک ہی وقت میں متعدد حکمت عملیوں کو چلانا چاہتے ہیں، جیسے رجحان کی پیروی کرنے والی حکمت عملی، مطلب کی تبدیلی کی حکمت عملی، اور ثالثی کی حکمت عملی، اور ان حکمت عملیوں کو مارکیٹ کی معلومات اور تجارتی سگنلز کا اشتراک کرنے کے لیے حقیقی وقت میں بات چیت کرنے دیں، اس طرح مجموعی تجارتی کارکردگی اور استحکام میں بہتری آئے گی۔
    1. کراس مارکیٹ ثالثی مطالبہ کا منظرنامہ: تاجر مختلف تجارتی منڈیوں کے درمیان ثالثی لین دین کرنا چاہتے ہیں۔ مثال کے طور پر، A-شیئر مارکیٹ اور ہانگ کانگ اسٹاک مارکیٹ کے درمیان قیمت کے فرق کا فائدہ اٹھا کر ثالثی کی جا سکتی ہے۔ جب کسی خاص مارکیٹ میں غیر معمولی قیمتیں واقع ہوتی ہیں، تو حکمت عملی کو دوسری مارکیٹوں میں حکمت عملیوں کو فوری طور پر مطلع کرنے کی ضرورت ہوتی ہے تاکہ ثالثی کے مواقع حاصل کرنے کے لیے متعلقہ خرید و فروخت کی کارروائیاں انجام دیں۔
    1. رسک مینجمنٹ اور ہیجنگ مطالبہ کا منظرنامہ: ایک حکمت عملی مارکیٹ میں زیادہ رسک والے، اعلی انعام والے تجارت کو تلاش کرنے اور اس پر عمل درآمد کرنے کے لیے ذمہ دار ہے، جب کہ دوسری حکمت عملی مجموعی خطرے کی نگرانی اور ہیجنگ کے کاموں کو انجام دینے پر مرکوز ہے۔ اس بات کو یقینی بنانے کے لیے کہ زیادہ خطرہ والے لین دین کے دوران ضرورت سے زیادہ نقصان نہ ہو، دونوں حکمت عملیوں کو حقیقی وقت میں ڈیٹا کا تبادلہ اور اشتراک کرنے کی ضرورت ہے تاکہ پوزیشنز کو ایڈجسٹ کیا جا سکے اور بروقت خطرات سے بچا جا سکے۔
    1. تقسیم شدہ تجارتی نظام مطالبہ کا منظرنامہ: بڑے تجارتی ادارے تجارتی نظام کی خرابی برداشت اور کارکردگی کو بہتر بنانے کے لیے متعدد جسمانی سرورز پر تقسیم شدہ تجارتی نظام چلانے کی امید رکھتے ہیں۔ ان سرورز پر حکمت عملیوں کو ڈیٹا کو ہم آہنگ کرنے اور مواصلاتی پروٹوکول کے ذریعے آپریشنز کو مربوط کرنے کی ضرورت ہے تاکہ مجموعی تجارتی نظام کے مستحکم اور موثر آپریشن کو یقینی بنایا جا سکے۔
    1. مارکیٹ کی نگرانی اور ابتدائی انتباہ مطالبہ کا منظرنامہ: ایک حکمت عملی مارکیٹ کی حرکیات کی حقیقی وقت کی نگرانی کے لیے ذمہ دار ہوتی ہے جب مارکیٹ میں بڑی تبدیلیاں ہوتی ہیں (جیسے کہ قیمت میں اچانک کمی یا اضافہ)، حکمت عملی کو متعلقہ اقدامات کرنے کے لیے فوری طور پر دیگر حکمت عملیوں کو مطلع کرنے کی ضرورت ہوتی ہے، جیسے کہ بند ہونے والی پوزیشنیں، پوزیشنز کو ایڈجسٹ کرنا، یا خطرات کو کم کرنے کے لیے پوزیشنز کا اضافہ کرنا یا تجارتی مواقع سے فائدہ اٹھانا۔
    1. پورٹ فولیو حکمت عملی کا انتظام مطالبہ کا منظرنامہ: تاجر مختلف اثاثہ کلاسوں میں سرمایہ کاری کا انتظام کرنے کے لیے حکمت عملیوں کا ایک پورٹ فولیو استعمال کرتے ہیں، ہر حکمت عملی ایک مخصوص اثاثہ کلاس (جیسے اسٹاک، بانڈ، فیوچر وغیرہ) پر توجہ مرکوز کرتی ہے۔ پورٹ فولیو کی سرمایہ کاری کی مجموعی اصلاح اور زیادہ سے زیادہ منافع حاصل کرنے کے لیے ان حکمت عملیوں کو بات چیت اور مربوط کرنے کی ضرورت ہے۔

یہ مطالبہ منظرنامے عملی ایپلی کیشنز میں FMZ تجارتی حکمت عملی ریئل ٹائم کمیونیکیشن پروٹوکول کے مختلف امکانات اور فوائد کو ظاہر کرتے ہیں۔ حکمت عملیوں کے درمیان موثر مواصلت کے ذریعے، تاجر مارکیٹ کے پیچیدہ ماحول سے بہتر طور پر نمٹ سکتے ہیں، تجارتی حکمت عملیوں کو بہتر بنا سکتے ہیں، اور تجارتی کارکردگی اور منافع کو بہتر بنا سکتے ہیں۔


FMZ encapsulated کمیونیکیشن پروٹوکول اور ڈائل فنکشن

حقیقی ڈسکوں کے درمیان مواصلات کی ضروریات کو سمجھنے کے بعد، ہمیں ان ضروریات کو کیسے پورا کرنے پر غور کرنے کی ضرورت ہے۔ یہ اس سے زیادہ کچھ نہیں ہے کہ حقیقی کیس A کو حقیقی کیس B کے ساتھ معلومات کا تبادلہ کرنے کی امید ہے، حالانکہ مطالبہ آسان لگتا ہے۔ تاہم، مواصلاتی پروٹوکول کے ایک سیٹ کے استعمال پر مختلف تفصیلات پر اتفاق کرنے کی ضرورت ہے FMZ نے متعدد مقبول مواصلاتی پروٹوکول کو شامل کیا ہے۔

mqtt / nats / amqp / kafka

مواصلاتی فن تعمیر

مواصلاتی فن تعمیر ہے:

  • سرور (پراکسی)۔ سبسکرائبرز اور پبلشرز کے درمیان پیغامات کو ریلے کرنے کے لیے ایک کمیونیکیشن پروٹوکول سرور کو چلانے کی ضرورت ہے۔ یہ سرور مقامی طور پر میزبان کے نظام پر تعینات کیا جا سکتا ہے (مقامی ریئل ڈسک مواصلات کے لیے)
  • کلائنٹ (سبسکرائبرز، پبلشرز)۔ FMZ پر حکمت عملی پروگرام کو ایک کمیونیکیشن پروٹوکول کے کلائنٹ کے طور پر سمجھا جا سکتا ہے حکمت عملی پروگرام ایک پبلشر (پب) یا سبسکرائبر (سب) ہو سکتا ہے۔

ڈائل فنکشن

FMZ پلیٹ فارم پر ان پروٹوکولز کو لاگو کرتے وقت، اسے آسانی سے mqtt/nats/amqp/kafka کے طور پر سمجھا جا سکتا ہے۔Dial()فنکشن میں، استعمال کریں۔Dial()فنکشنز پیغامات کو شائع کرنے اور سبسکرائب کرنے کے لیے استعمال ہوتے ہیں۔ یہ شائع شدہ پیغامات پروٹوکول سرور کے ذریعے سبسکرائب شدہ اصلی ڈسک پر پراکسیڈ (ریلے کیے گئے) ہیں، اس لیے پہلے پروٹوکول سرور کو چلایا جانا چاہیے۔ مظاہرے میں آسانی کے لیے، ہم مندرجہ ذیل مثالوں میں مختلف پروٹوکول سرور امیج کی تعیناتی کا استعمال کرتے ہیں۔

ڈائل فنکشن API دستاویزات سیکشن: https://www.fmz.com/syntax-guide#fun_dial

ڈوکر امیج کو تعینات کرنے سے پہلے، یاد رکھیں کہ پہلے ڈوکر سافٹ ویئر انسٹال کریں۔

FMZ کی تلاش: حقیقی تجارتی حکمت عملیوں کے درمیان مواصلاتی پروٹوکول کی مشق

اگلا، آئیے ایف ایم زیڈ کے ذریعے تعاون یافتہ کمیونیکیشن پروٹوکول ایپلی کیشنز کو دریافت کریں اور ان پر عمل کریں۔


FMZ پلیٹ فارم ریئل ٹائم کمیونیکیشن پروٹوکول پریکٹس

MQTT پروٹوکول

MQTT (Message Quueing Telemetry Transport) ایک ہلکا پھلکا میسج ٹرانسمیشن پروٹوکول ہے جو خاص طور پر کم بینڈوتھ، زیادہ تاخیر یا غیر معتبر نیٹ ورک ماحول کے لیے موزوں ہے۔ اسے اینڈی اسٹینفورڈ کلارک اور آئی بی ایم کے آرلن نپر نے 1999 میں تجویز کیا تھا اور بعد میں آئی ایس او اسٹینڈرڈ (ISO/IEC PRF 20922) بن گیا۔

MQTT پروٹوکول کی اہم خصوصیات: شائع/سبسکرائب موڈ

  • اشاعت: پیغام تیار کرنے والا پیغام کو موضوع پر بھیجتا ہے۔
  • سبسکرپشن: ایک پیغام صارف دلچسپی کے موضوع کو سبسکرائب کرتا ہے، اس طرح اس موضوع پر شائع ہونے والے پیغامات موصول ہوتے ہیں۔
  • بروکر: MQTT پیغامات کو آگے بڑھانے کے لیے ایک میسج بروکر کو بطور ثالث استعمال کرتا ہے، اس بات کو یقینی بناتا ہے کہ پبلشرز اور سبسکرائبرز کے درمیان ڈیکپلنگ ہو۔

پیغام کی اشاعت اور رکنیت

چونکہ ہم سافٹ ویئر کی docker امیج (eclipse-mosquitto image) استعمال کرتے ہیں جو MQTT پراکسی سرور کو تعینات کرنے کے لیے MQTT پروٹوکول کو سپورٹ کرتا ہے، ہم نے پہلے سے docker انسٹال کر لیا ہے اور بعد میں تفصیلات میں نہیں جائیں گے۔

تصویر کو تعینات کرنے کے لیے کمانڈ چلانے سے پہلے، ہمیں ایک پراکسی سرور کنفیگریشن فائل لکھنی ہوگی۔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

مندرجہ بالا حکمت عملی ایک ہی وقت میں ایک موضوع کو شائع کرتی ہے اور اسے سبسکرائب کرتی ہے جیسا کہ تصویر میں دکھایا گیا ہے:

FMZ کی تلاش: حقیقی تجارتی حکمت عملیوں کے درمیان مواصلاتی پروٹوکول کی مشق

آپ ایک دوسرے کو سبسکرائب کرنے اور موضوع کی معلومات شائع کرنے کے لیے دو اصلی ڈسکوں کا استعمال بھی کر سکتے ہیں، ہم NATS پروٹوکول پریکٹس سیکشن میں اس طرح کی مثال استعمال کرتے ہیں، اور دوسرے پروٹوکولز میں اس طریقہ کو نہیں دہرائیں گے۔


NATS پروٹوکول

NATS پروٹوکول ایک سادہ، متن پر مبنی اشاعت/سبسکرائب طرز کا پروٹوکول ہے۔ کلائنٹ gnatsd (NATS سرور) سے رابطہ کرتا ہے اور مواصلات عام TCP/IP ساکٹ پر مبنی ہوتا ہے اور نیو لائن ختم ہونے کی نشاندہی کرتا ہے۔ روایتی پیغام رسانی کے نظام کے برعکس جو بائنری میسج فارمیٹس استعمال کرتے ہیں، ٹیکسٹ پر مبنی NATS پروٹوکول کلائنٹ کے نفاذ کو آسان بناتا ہے اور اسے مختلف پروگرامنگ زبانوں یا اسکرپٹنگ زبانوں میں آسانی سے لاگو کیا جا سکتا ہے۔

ہر پروٹوکول کی اپنی خصوصیات ہیں آپ مخصوص دستاویزات اور مواد کا حوالہ دے سکتے ہیں، جن کی وضاحت یہاں نہیں کی جائے گی۔

NATS پروٹوکول سرور کو تعینات کریں:

docker run –name nats –rm -p 4222:4222 -p 8222:8222 nats –http_port 8222 –auth admin

یہ ڈوکر کمانڈ خود بخود نٹ امیج کو ڈاؤن لوڈ اور چلائے گا پورٹ 4222 وہ پورٹ ہے جس تک کلائنٹ رسائی حاصل کرنا چاہتا ہے۔ تصویر کے تعینات ہونے کے بعد، پورٹ 8222 پر ایک HTTP مانیٹر کھل جائے گا۔

Listening for client connections on 0.0.0.0:4222
Server is ready

پورٹ 4222 پر سنتے ہوئے، نیٹ سرور کی تصویر چلنا شروع ہو جاتی ہے۔

مقامی ڈیوائس ریئل ٹائم حکمت عملیوں کے درمیان مواصلت

ہمیں دو حکمت عملی (حقیقی تجارت) بنانے کی ضرورت ہے، آئیے ان کو ابھی کے لیے حکمت عملی A اور حکمت عملی B کا نام دیں ان دونوں حکمت عملیوں کے کوڈ بنیادی طور پر ایک جیسے ہیں۔ Javascript میں لکھی گئی، FMZ پلیٹ فارم پر استعمال کرنے کے لیے سب سے آسان زبان۔

  • حکمت عملی اے
  var connPub = null 
  var connSub = null

  function main() {
      var robotId = _G()
      Log("当前实盘robotId:", robotId)

      connPub = Dial("nats://[email protected]:4222?topic=pubRobotA")
      if (!connPub) {
          Log("通信失败!")
          return 
      }

      connSub = Dial("nats://[email protected]: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://[email protected]:4222?topic=pubRobotB")
      if (!connPub) {
          Log("通信失败!")
          return 
      }

      connSub = Dial("nats://[email protected]: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()
  }

یہ دونوں حکمت عملی بنیادی طور پر ایک جیسی ہیں، سوائے اس کے کہ وہ ایک دوسرے کو شائع اور سبسکرائب کرتے ہیں، اور سبسکرائب کیے گئے عنوانات، شائع شدہ عنوانات، اور شائع شدہ معلومات مختلف ہیں۔

حکمت عملی B کو مثال کے طور پر لیں:

  • 1. استعمال کریں۔Dial()فنکشن کلائنٹ کنکشن سرور آبجیکٹ بناتا ہے۔connPub, موضوع کے پیغام کی اشاعت کے لیے استعمال کیا جاتا ہے:

var connPub = Dial(“nats://[email protected]:4222?topic=pubRobotB”)

ڈائل فنکشن کا پیرامیٹر سٹرنگ شروع ہوتا ہے۔nats://اشارہ کرتا ہے کہ NATS پروٹوکول مواصلات کے لئے استعمال ہوتا ہے، پھرadminڈاکر امیج کو تعینات کرتے وقت یہ ایک سادہ تصدیقی معلومات سیٹ ہوتی ہے۔auth admin، درج ذیل مواد کو الگ کرنے کے لیے “@” حرف استعمال کریں، اور پھر سروس کا پتہ اور پورٹ127.0.0.1:4222، اور آخر میں شائع/سبسکرائب موضوع:topic=pubRobotBنوٹ کریں کہ پچھلے پتے کے درمیان “؟” کی علامت ہے۔

  • 2. استعمال کریں۔Dial()فنکشن کلائنٹ کنکشن سرور آبجیکٹ بناتا ہے۔connSub, موضوع کے پیغام کی رکنیت کے لیے استعمال کیا جاتا ہے:

var connSub = Dial(“nats://[email protected]:4222?topic=pubRobotA”)

فرق صرف اتنا ہے۔topic=pubRobotAمختلف، کیونکہ آپ کو اس موضوع کو سبسکرائب کرنے کی ضرورت ہے جہاں حکمت عملی A معلومات بھیجتی ہے۔pubRobotA

حکمت عملی A میں رکنیت اور اشاعت کنکشن اشیاء کی تخلیق اور استعمال وہی ہیں جیسا کہ اوپر بیان کیا گیا ہے۔

  • حکمت عملی اے چلتا ہے۔

FMZ کی تلاش: حقیقی تجارتی حکمت عملیوں کے درمیان مواصلاتی پروٹوکول کی مشق

  • حکمت عملی B چلتا ہے۔

FMZ کی تلاش: حقیقی تجارتی حکمت عملیوں کے درمیان مواصلاتی پروٹوکول کی مشق

اس طرح، NATS پروٹوکول ایپلی کیشن کی ایک سادہ مثال کو لاگو کیا جاتا ہے جس میں اصلی ڈسک A اور اصلی ڈسک B ایک دوسرے کے ساتھ بات چیت کرنے کے لیے سبسکرائب اور پیغامات شائع کرتے ہیں۔


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

    conn = Dial("amqp://q:[email protected]: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 پیغامات لکھے جائیں گے۔ پھر جب ہم اسے دوسری بار چلاتے ہیں تو ہمیں معلوم ہوتا ہے کہ پڑھتے وقت پہلی بار لکھی گئی معلومات کو دوبارہ پڑھا جائے گا۔ جیسا کہ شکل میں دکھایا گیا ہے:

FMZ کی تلاش: حقیقی تجارتی حکمت عملیوں کے درمیان مواصلاتی پروٹوکول کی مشق

آپ دیکھ سکتے ہیں کہ اسکرین شاٹ میں سرخ تیروں کے ذریعہ اشارہ کردہ دو لاگ پیغامات میں متضاد اوقات ہیں اس کی وجہ یہ ہے کہ سرخ پیغام وہ ہے جو اسٹریٹیجی کوڈ کو پہلی بار چلانے کے وقت قطار میں پڑھا اور لکھا گیا تھا۔

اس خصوصیت کی بنیاد پر، کچھ ضروریات کو پورا کیا جا سکتا ہے، مثال کے طور پر، حکمت عملی کے دوبارہ شروع ہونے کے بعد، ریکارڈ شدہ مارکیٹ کا ڈیٹا اب بھی شروع کے حساب کتاب اور دیگر کارروائیوں کے لیے حاصل کیا جا سکتا ہے۔


کافکا پروٹوکول

اپاچی کافکا ایک تقسیم شدہ ڈیٹا اسٹور ہے جو حقیقی وقت میں اسٹریمنگ ڈیٹا کو ہضم کرنے اور اس پر کارروائی کرنے کے لیے موزوں ہے۔ سٹریمنگ ڈیٹا سے مراد وہ ڈیٹا ہے جو ڈیٹا کے ہزاروں ذرائع سے مسلسل تیار ہوتا ہے، اکثر ڈیٹا ریکارڈز کو بیک وقت بھیجتا ہے۔ اسٹریمنگ پلیٹ فارم کو اس مسلسل بہنے والے ڈیٹا پر کارروائی کرنے کی ضرورت ہے اور اسے مرحلہ وار ترتیب دینے کی ضرورت ہے۔

کافکا اپنے صارفین کو تین اہم کام فراہم کرتا ہے:

  • ریکارڈز کے سلسلے کو شائع کرنا اور سبسکرائب کرنا
  • ریکارڈز کے ایک سلسلے کو اس ترتیب میں محفوظ کریں جس ترتیب سے وہ تیار کیے گئے تھے۔
  • ریئل ٹائم میں ریکارڈز کے سلسلے پر کارروائی کرنا

کافکا بنیادی طور پر ریئل ٹائم اسٹریمنگ ڈیٹا پائپ لائنز اور ایپلی کیشنز بنانے کے لیے استعمال ہوتا ہے جو ڈیٹا اسٹریمز کے مطابق ہوتی ہیں۔ یہ تاریخی اور حقیقی دونوں ڈیٹا کو ذخیرہ کرنے کے لیے پیغام رسانی، اسٹوریج، اور اسٹریم پروسیسنگ کی صلاحیتوں کو یکجا کرتا ہے۔

پیغام کی اشاعت اور رکنیت

کافکا پراکسی کی ڈاکر امیج تعینات کریں:

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

ٹیسٹ کے نتائج:

FMZ کی تلاش: حقیقی تجارتی حکمت عملیوں کے درمیان مواصلاتی پروٹوکول کی مشق