مقدمه
الگوی پیام نقطه به نقطه معمولاً از مدل ارتباطی در معماری های مدرن وب و ابر استفاده می شود. طراحی شده است تا تعاملات ناهمزمان بین اجزای مختلف را فعال کند، به عنوان مثال. توابع بدون سرور یا میکروسرویسها، به آنها اجازه میدهد پیامها را بدون نیاز به پاسخ فوری مبادله کنند.
در این الگو، مؤلفه ای که پیام را ارسال می کند، تولیدکننده، در حالی که مؤلفه ای که پیام را دریافت و پردازش می کند، مصرف کننده نامیده می شود. تولیدکننده و مصرفکننده میتوانند در یک سیستم یا در سیستمهای مختلف قرار بگیرند، که آن را به یک رویکرد انعطافپذیر و مقیاسپذیر برای ارتباطات تبدیل میکند.
مشابه نحوه تحویل ایمیلها به گیرندگان، پیامها نیز از تولیدکننده به مصرفکننده خاصی ارسال میشوند. این امکان برقراری ارتباط کارآمد و قابل اعتماد را حتی در سیستم های پیچیده توزیع شده فراهم می کند. معمولاً در سناریوهایی استفاده میشود که تولیدکننده دقیقاً میداند کدام مصرفکننده باید پیام را دریافت کند، اما لازم نیست تولیدکننده پاسخ فوری دریافت کند.
الگوی پیام نقطه به نقطه به طور موثر ارتباط و هماهنگی بین اجزا را تسهیل می کند و عملکرد کلی، قابلیت اطمینان و مقیاس پذیری معماری های مدرن وب و ابر را بهبود می بخشد.
آنچه ما خواهیم ساخت
در این آموزش گام به گام، این الگو را با استفاده از دو تابع AWS Lambda و یک صف Amazon SQS پیاده سازی می کنیم.
در این آموزش گام به گام، یک مثال ساده را با استفاده از دو تابع AWS Lambda و یک صف Amazon SQS پیاده سازی می کنیم.
نمونه را با استفاده از TypeScript و کیت توسعه ابری AWS (AWS CDK) خواهید ساخت.
مثال از سه جزء تشکیل خواهد شد:
- تولیدکننده ای که می تواند برای مصرف کننده پیام ارسال کند
- مصرف کننده ای که می تواند پیام های تولید کننده را دریافت کند
- یک صف پیام که کانال ارتباطی بین تولید کننده و مصرف کننده را ایجاد می کند
علاوه بر پیاده سازی این الگو، ما همچنین قدرت کیت توسعه ابری AWS (CDK) را برای تعریف کل زیرساخت به عنوان کد برجسته خواهیم کرد. اگر می خواهید درباره AWS CDK اطلاعات بیشتری کسب کنید، به راهنمای توسعه دهنده AWS CDK نگاهی بیندازید.
در پایان این آموزش، شما درک کاملی از اجزای منفرد پیامرسانی نقطهبهنقطه مبتنی بر صف بهدست خواهید آورد، ارتباطات ناهمزمان را با موفقیت بین دو تابع Lambda با استفاده از SQS پیادهسازی کردهاید و تجربهای عملی در ساخت زیرساختها کسب خواهید کرد. کد با CDK
اما قبل از شروع کدنویسی، اجازه دهید نگاهی گذرا به مزایا و معایب الگوی پیام رسانی نقطه به نقطه ناهمزمان داشته باشیم.
مزایا و معایب الگوی پیام رسانی نقطه به نقطه ناهمزمان
مزایا
- اتصال شل: الگوی پیامرسانی نقطه به نقطه ناهمزمان، اتصال آزاد بین برنامهها را ترویج میکند و به آنها اجازه میدهد به طور مستقل بدون نیاز به ادغام شدید ارتباط برقرار کنند. این انعطاف پذیری مقیاس و اصلاح اجزای جداگانه را بدون تأثیر بر کل سیستم آسان تر می کند.
- مقیاس پذیری: این الگو امکان مقیاس بندی افقی کارآمد را فراهم می کند، زیرا می توان چندین برنامه مصرف کننده را برای مدیریت بار کاری به صورت ناهمزمان اضافه کرد. این سیستم را قادر میسازد تا حجم بالایی از پیامها و درخواستهای همزمان را به طور مؤثرتری مدیریت کند.
- قابلیت اطمینان: در پیامرسانی ناهمزمان، اگر پیامی تحویل یا پردازش نشود، میتوان آن را دوباره امتحان کرد یا برای پردازش بعدی به صف خطا فرستاد و قابلیت اطمینان سیستم را افزایش داد.
- تحمل خطا: پیامرسانی ناهمزمان با جدا کردن تولیدکنندگان و مصرفکنندگان پیامها، تحمل خطا را فراهم میکند. اگر یکی از برنامهها یا مؤلفهها خراب شود، پس از اینکه سیستم دوباره آنلاین شد، پیامها را میتوان برای پردازش بعدی ذخیره کرد و اطمینان حاصل کرد که هیچ دادهای از بین نمیرود.
معایب
- پیچیدگی: پیادهسازی الگوی پیامرسانی نقطه به نقطه ناهمزمان میتواند در مقایسه با سایر الگوهای ادغام پیچیدهتر باشد و به منطق مدیریت پیام اضافی نیاز دارد.
- وابستگیهای پیام و تکرار احتمالی: مدیریت وابستگیها بین پیامها و حصول اطمینان از حذف صحیح پیامها میتواند در یک سیستم پیام رسانی ناهمزمان چالش برانگیز باشد. برای رسیدگی به مسائل احتمالی مانند ترتیب پیام، تکرار پیام ها و وابستگی های پردازش پیام به طراحی و اجرای دقیق نیاز دارد.
- افزایش تأخیر: پیامرسانی ناهمزمان باعث تأخیر بین ارسال پیام و دریافت پاسخ میشود، زیرا ممکن است پردازش پیامها بیشتر طول بکشد. این تأخیر می تواند بر تعاملات بلادرنگ تأثیر بگذارد و ممکن است برای برنامه هایی که نیاز به بازخورد فوری دارند مناسب نباشد.
هنگام تصمیم گیری های معماری، همیشه مهم است که این مبادلات را در نظر بگیرید و الگوی ارتباطی را انتخاب کنید که به بهترین وجه با الزامات و محدودیت های خاص شما هماهنگ باشد. بسیاری از برنامههای کاربردی مدرن به الگوهای ادغام چندگانه، از جمله پیامرسانی نقطه به نقطه ناهمزمان، و همچنین ارتباط درخواست-پاسخ همزمان، و ارتباطات مبتنی بر رویداد متکی هستند.
اما اکنون، بیایید آموزش را شروع کنیم و یاد بگیریم که چگونه این الگو را با استفاده از AWS Lambda و Amazon SQS پیاده سازی کنیم.
نکته ای در مورد هزینه های منابع هنگام کدنویسی: این آموزش فقط از حداقل مقدار منابع استفاده می کند که همه آنها در ردیف رایگان ارائه شده توسط AWS برای 12 ماه اول پس از ایجاد هر حساب گنجانده شده اند:
- چند کیلوبایت کد در آمازون S3 ذخیره خواهد شد که 5 گیگابایت فضای ذخیره سازی رایگان را فراهم می کند.
- ما چند بار با SQS تماس می گیریم که 1 میلیون درخواست رایگان در ماه ارائه می دهد.
- ما دو تابع را در AWS Lambda فراخوانی خواهیم کرد، که همچنین 1 میلیون فراخوانی رایگان در ماه ارائه می دهد.
بنابراین اگر راهنمای گام به گام را دنبال کنید، مطمئناً در ردیف رایگان خواهید ماند. من همچنین بخشی را به پایان اضافه کرده ام که به شما کمک می کند تمام منابع ایجاد شده در طول این آموزش را حذف کنید.
پیش نیازها
اگر CLI و CDK نصب شده اند، باید نسخه های مربوط به نصب های خود را ببینید. اگر اینطور نیست، با خطایی مواجه می شوید که به شما می گوید دستور پیدا نمی شود.
قبل از شروع این آموزش، به موارد زیر نیاز دارید:
- حساب AWS
- کیت توسعه ابری AWS (AWS CDK)
این آموزش حداقل به نسخه 2 AWS CLI و AWS CDK نیاز دارد.
با اجرای دستور زیر در ترمینال می توانید نسخه AWS CLI را تشخیص دهید:
aws --version
و نسخه AWS CDK را با اجرای دستور زیر:
cdk --version
مرحله 1 – برنامه CDK را ایجاد کنید
1.1 – برنامه CDK را راه اندازی کنید
اول، شما باید از تنظیمات اولیه مراقبت کنید و به CDK اجازه دهید به طور خودکار کدی را ایجاد کند که پروژه را ایجاد می کند.
از خط فرمان یک دایرکتوری برای پروژه ایجاد کنید، cd را در دایرکتوری ایجاد کنید و پروژه را مقداردهی اولیه کنید:
mkdir point-to-point-example
cd point-to-point-example
cdk init app --language typescript
با این کار ساختار فایل اصلی برای پروژه ایجاد می شود و بسته های مورد نیاز نصب می شود.
اکنون زمان خوبی است که پروژه را در IDE مورد علاقه خود باز کنید و به پروژه تولید شده و به طور خاص دو فایل زیر نگاهی بیندازید:
point-to-point-example/
├── bin/
│ └── point-to-point-example.ts
├── lib/
│ └── point-to-point-example-stack.ts
└── ...
فایل bin\point-to-point-example.ts
نقطه ورودی برنامه CDK است. در این آموزش دیگر نیازی به بررسی این فایل نخواهیم بود.
فایل lib\point-to-point-example-stack.ts
جایی است که پشته اصلی برنامه تعریف می شود. این فایل جایی است که ما بیشتر وقت خود را در آن می گذرانیم.
همانطور که از طریق این آموزش به جلو می رویم، زیرساخت برنامه خود را به کلاس PointToPointExampleStack
در این فایل اضافه می کنیم. آن را در ویرایشگر خود باز کنید و نگاهی بیندازید:
import * as cdk from 'aws-cdk-lib';
import { Construct } from 'constructs';
// import * as sqs from 'aws-cdk-lib/aws-sqs';
export class PointToPointExampleStack extends cdk.Stack {
constructor(scope: Construct, id: string, props?: cdk.StackProps) {
super(scope, id, props);
// The code that defines your stack goes here
// ...
}
}
1.2 – محیط را بوت استرپ کنید
اولین باری که یک برنامه AWS CDK را در یک محیط، یعنی یک حساب و منطقه خاص AWS مستقر میکنید، باید محیط را با یک پشته CDKToolkit بوت کنید. این پشته یک سطل S3 را مستقر می کند که برای ذخیره قالب ها و دارایی ها در طول فرآیند استقرار برنامه واقعی استفاده می شود.
برای بوت استرپ کردن محیط، مطمئن شوید که هنوز در دایرکتوری نقطه به نقطه مثال هستید و دستور زیر را اجرا کنید:
cdk bootstrap
این کار کمی طول می کشد و زمانی که خروجی زیر را در خط فرمان خود مشاهده کردید تکمیل می شود:
✅ Environment aws://[account_id]/[region] bootstrapped.
1.3 – stack اولیه را مستقر کنید
برای استقرار stack، مطمئن شوید که هنوز در دایرکتوری نقطه به نقطه مثال هستید و دستور زیر را اجرا کنید:
cdk deploy
این دستور برنامه را در قالب AWS CloudFormation ترکیب میکند و آن را در حساب AWS شما مستقر میکند.
اکنون جزئیات پشته را باز کرده و کاوش کنید. در برگه Resources میبینید که هیچ چیزی را مستقر نکرده است، به جز منبعی به نام CDKMetadata، که فقط برخی از جزئیات پیکربندی اولیه برای پشته ما هستند.
مرحله 2 – صف SQS را ایجاد کنید
هنگامی که همه چیز تنظیم شد، می توانید اولین منبع واقعی خود را ایجاد کنید که یک صف SQS خواهد بود.
2.1 – صف را به پشته اضافه کنید
برای شروع، فایل lib\point-to-point-example-stack.ts
را باز کنید.
بسته به نسخه قالب CDK، ممکن است قبلاً چند عبارت وارداتی از جمله aws-cdk-lib/aws-sqs را در یک نظر اضافه کرده باشد. اگر اینطور است، نمادهای نظر // در جلوی import * as sqs را از ‘aws-cdk-lib/aws-sqs’ حذف کنید، در غیر این صورت خودتان آن را اضافه کنید، به طوری که سه خط اول فایل شبیه به این باشد:
import * as cdk from 'aws-cdk-lib';
import { Construct } from 'constructs';
import * as sqs from 'aws-cdk-lib/aws-sqs';
حالا نظرات داخل کلاس PointToPointExampleStack
را حذف کنید و کد زیر را جایگزین کنید و تغییرات خود را ذخیره کنید:
const queue = new sqs.Queue(this, 'Queue', {
queueName: 'MyQueue',
});
2.2 – صف را مستقر کنید
برای استقرار صف، دستور زیر را در فهرست پروژه خود اجرا کنید:
cdk deploy
اکنون می توانید روند استقرار را در خروجی ترمینال نظارت کنید و پس از یک یا دو دقیقه باید کامل شود.
پس از اتمام استقرار، به لیست صف های SQS خود در کنسول مدیریت AWS بروید و صفی به نام SqsTutorialStack-Queue را پیدا کنید:
2.3 – صف Deployed را بررسی کنید
به داشبورد SQS در کنسول مدیریت AWS بروید و به لیست صف ها نگاه کنید. اگر نمی توانید صف خود را پیدا کنید، مطمئن شوید که در منطقه صحیح هستید.
مرحله 3 – تابع Producer را ایجاد کرده و آن را به صف وصل کنید
3.1 – کد منبع تابع تولید کننده را بنویسید
ما از جاوا اسکریپت برای تابع Lambda استفاده می کنیم و کد منبع را در پوشه خودش در داخل برنامه CDK ذخیره می کنیم. بعداً از پشته CDK خود به این پوشه اشاره خواهیم کرد تا بتواند به طور خودکار محتویات را در AWS بسته بندی، آپلود و مستقر کند.
مطمئن شوید که در دایرکتوری پروژه هستید و دایرکتوری های زیر و خود فایل را ایجاد کنید:
mkdir lambda-src
mkdir lambda-src/producer
touch lambda-src/producer/send_message_to_sqs.js
ساختار دایرکتوری پروژه شما اکنون باید به شکل زیر باشد:
point-to-point-example/
├── bin/
│ └── point-to-point-example.ts
├── lambda-src/
│ └── producer/
│ └── send_message_to_sqs.js
├── lib/
│ └── point-to-point-example-stack.ts
└── ...
فایل جدید ایجاد شده lambda-src/producer/send_message_to_sqs.js
را در ویرایشگر خود باز کنید و کد زیر را اضافه کنید:
const sqs = require("@aws-sdk/client-sqs");
// Create an Amazon SQS service client
const client = new sqs.SQSClient();
exports.handler = async (event, context) => {
// Create a message, including the function's name from
// its execution context
const myMessage = 'Hello World from ' + context.functionName
// Get the queue URL from the execution environment
const queueUrl = process.env.SQSQueueUrl
// Create a SendMessageCommand containing the message
// and the queue URL
const command = new sqs.SendMessageCommand({
MessageBody: JSON.stringify({ message: myMessage }),
QueueUrl: queueUrl
});
// Send the message and return the result
const result = await client.send(command);
return result;
}
این یک کنترل کننده تابع Lambda ساده است که پیامی را به صف SQS ما ارسال می کند و نتیجه را برمی گرداند.
توجه داشته باشید که از آنجایی که ما لزوماً نمی دانیم هنگام ساخت این تابع از کدام صف استفاده کنیم، یا ممکن است بخواهیم بعداً بدون نیاز به تغییر کد تابع آن را تغییر دهیم، URL صف را از محیط اجرا بازیابی می کنیم. به این ترتیب، میتوانیم آن را به صورت پویا در طول استقرار تابع Lambda در پشته CDK تعریف کنیم.
3.2 – تابع Producer را به پشته اضافه کنید
برای ایجاد تابع Lambda واقعی در AWS، باید آن را به پشته اضافه کنید. برای انجام این کار، lib/point-to-point-example-stack.ts را باز کنید.
ابتدا دستور import دیگری را به بالای فایل اضافه کنید:
import * as lambda from 'aws-cdk-lib/aws-lambda';
سپس قطعه زیر را داخل سازنده، زیر صف اضافه کنید:
const producerFunction = new lambda.Function(this, 'Producer', {
functionName: 'Producer',
runtime: lambda.Runtime.NODEJS_18_X,
code: lambda.Code.fromAsset('lambda-src/producer'),
handler: 'send_message_to_sqs.handler',
environment: {
SQSQueueUrl: queue.queueUrl,
}
});
این یک تابع، بستهها و محتوای دایرکتوری lambda-src/producer را ایجاد میکند و تابع را برای استفاده از handler تعریفشده در send_message_to_sqs.js هنگام فراخوانی، پیکربندی میکند.
همچنین به صورت پویا متغیر محیطی SQSQueueUrl را روی URL واقعی صف SQS تنظیم می کند تا با استفاده از process.env.SQSQueueUrl از داخل تابع قابل دسترسی باشد.
3.3 – اعطای مجوز به عملکرد تولیدکننده
هر تابع Lambda به چند مجوز اساسی IAM نیاز دارد که CDK به طور پیشفرض با استفاده از یک نقش اجرای اساسی ارائه میکند.
با این حال، تابع تولید کننده ما به مجوز اضافی برای ارسال پیام به صف نیاز دارد. خوشبختانه، در CDK ما نیازی به مدیریت سیاست های IAM به صورت دستی نداریم. ما می توانیم از متد grantSendMessages صف SQS با تابع Lambda خود استفاده کنیم.
برای انجام این کار، خط زیر را زیر producerFunction خود اضافه کنید:
queue.grantSendMessages(producerFunction);
3.4 – تابع تولید کننده را مستقر کنید
برای استقرار تابع به همراه کد منبع آن، دستور زیر را در دایرکتوری پروژه اجرا کنید:
cdk deploy
این امر استقرار هر گونه منابع جدید یا اصلاح شده را آماده می کند.
اگر هر تغییری در پشته شما نیاز به ایجاد یا اصلاح مجوزهای IAM داشته باشد، CDK از شما می خواهد که این تغییرات را به دلایل امنیتی دوباره بررسی کنید.
در تصویر زیر، می بینید که CDK می خواهد سه تغییر را اعمال کند که بر مجوزهای IAM تأثیر می گذارد:
- به سرویس Lambda (lambda.amazon.aws) اجازه دهید تا نقش اجرایی متصل به تابع Producer را بر عهده بگیرد.
- مستقیماً مجوزهای لازم را اضافه کنید تا به نقش اجرایی اجازه دسترسی و ارسال پیام به صف SQS را بدهد.
- یک خط مشی مدیریت شده با مجوزهای اولیه را به نقش اجرا اضافه کنید.
برای تأیید، y را تایپ کنید، و CDK تابع جدید Lambda را همراه با نقش IAM خود به کار می گیرد.
3.5 – عملکرد تولید کننده را آزمایش کنید
پس از اجرای عملکرد، به لیست توابع در داشبورد AWS Lambda بروید.
نام تابع همانی است که در پشته تعریف کردیم: Producer. اگر نمی توانید تابع را پیدا کنید، مطمئن شوید که در منطقه صحیح هستید.
روی نام تابع کلیک کنید تا جزئیات آن باز شود و به قسمت کد منبع بروید.
پوشه کاوشگر فایل در سمت چپ حاوی فایلی به نام send_message_to_sqs.js است.
روی نام فایل دوبار کلیک کنید تا منبع آن باز شود، جایی که می توانید ببینید که یک کپی دقیق از فایلی است که در پوشه lambda-src/producer در پروژه CDK خود ایجاد کرده ایم.
حالا بیایید یک رویداد آزمایشی را پیکربندی کنیم.
برای این کار بر روی دکمه Test کلیک کنید. اگر هنوز یک رویداد آزمایشی را پیکربندی نکردهاید، با این کار صفحه پیکربندی آزمایشی باز میشود. نام رویداد را وارد کنید، به عنوان مثال “test-event” و روی Save کلیک کنید.
هنگامی که رویداد آزمایشی پیکربندی شد، دوباره روی Test کلیک کنید، که سپس مستقیماً تابع Lambda را فراخوانی می کند.
با این کار یک برگه Execution Results شامل پاسخ ایجاد می شود:
{
"$metadata": {
"httpStatusCode": 200,
"requestId": "cb033b2a-1234-5678-9012-66188359d280",
"attempts": 1,
"totalRetryDelay": 0
},
"MD5OfMessageBody": "b5357af0c1c816b2d41275537cc0d1af",
"MessageId": "4a76e538-1234-5678-9012-749f0f4b9294"
}
قطعه کد موجود در تابع Lambda را به خاطر دارید؟
const result = await client.send(command);
return result;
شی JSON در نتایج اجرای بالا دقیقاً همان چیزی است که SQS به عنوان پاسخی به client.send(command) بازگردانده است، از جمله اطلاعات جالبی مانند “httpStatusCode”: 200، که به این معنی است که صف با موفقیت پیام را دریافت کرده است.
3.6 – بازیابی دستی پیام از SQS
در حال حاضر، صف به مصرف کننده متصل نیست، بنابراین پیام دریافت نخواهد شد. با این حال، ما می توانیم به صورت دستی پیام را بازیابی کنیم.
به داشبورد SQS بروید، روی صف کلیک کنید تا صفحه جزئیات آن باز شود و روی دکمه ارسال و دریافت پیام ها کلیک کنید.
در صفحه بعدی به بخش دریافت پیامها بروید و روی دکمه نظرسنجی برای پیامها کلیک کنید، که باید همه پیامهایی را که در حال حاضر در حال پرواز هستند، از جمله پیامهایی که عملکرد سازنده شما هنگام آزمایش آن ارسال کرده است، نشان دهد:
روی شناسه پیام کلیک کنید تا باز شود. باید حاوی بدنه زیر باشد:
{"message":"Hello World from Producer"}
تبریک می گویم! شما با موفقیت یک تابع Lambda را که پیام ها را به صف SQS ارسال می کند، مستقر کرده و آزمایش کرده اید.
در مرحله بعد، تابع مصرف کننده را می سازیم و آن را به گونه ای پیکربندی می کنیم که هر زمان که پیام جدیدی در صف می رسد، به طور خودکار فراخوانی شود.
مرحله 4 – تابع Consumer را ایجاد کرده و آن را به صف وصل کنید
4.1 – کد منبع تابع مصرف کننده را بنویسید
کد تابع مصرف کننده در پوشه خود در داخل lambda-src ذخیره می شود، به طوری که CDK می تواند به طور خودکار آن را بسته بندی و در تابع جدید Lambda آپلود کند.
مطمئن شوید که در دایرکتوری پروژه هستید (نه در bin/ یا lib/) و دایرکتوری زیر را به همراه فایل منبع ایجاد کنید:
mkdir lambda-src/consumer
touch lambda-src/consumer/receive_message_from_sqs.js
lambda-src/consumer/receive_message_from_sqs.js را در ویرایشگر خود باز کنید و کد زیر را وارد کنید:
exports.handler = async (event) => {
// Retrieve the message from the event and log it to the console
const message = event.Records[0].body;
console.log(message);
}
این یک کنترل کننده تابع Lambda بسیار ساده است که پیام SQS را باز می کند و آن را در گزارش چاپ می کند.
4.2 – تابع Consumer را به پشته اضافه کنید
برای ایجاد تابع Lambda واقعی در AWS، باید آن را به پشته اضافه کنید. برای انجام این کار، lib/point-to-point-example-stack.ts را باز کنید.
قطعه زیر را داخل سازنده، در زیر queue.grantSendMessages(producerFunction) اضافه کنید:
const consumerFunction = new lambda.Function(this, 'Consumer', {
functionName: 'Consumer',
runtime: lambda.Runtime.NODEJS_18_X,
code: lambda.Code.fromAsset('lambda-src/consumer'),
handler: 'receive_message_from_sqs.handler'
});
این تابع مصرف کننده، بسته ها و محتوای دایرکتوری lambda-src/consumer را ایجاد می کند و تابع را طوری پیکربندی می کند که هنگام فراخوانی از handler تعریف شده در receive_message_from_sqs.js استفاده کند.
4.3 – صف SQS را به عنوان منبع رویداد به The Consumer اضافه کنید
ما می خواهیم هر زمان که یک پیام جدید در صف ما وجود دارد، این تابع فعال شود. برای انجام این کار، ما باید صف را به عنوان منبع رویداد تابع اضافه کنیم، و همچنین تمام مجوزهای لازم برای مصرف پیام ها را به تابع اعطا کنیم.
ابتدا دستور import دیگری را به بالای فایل اضافه کنید:
import { SqsEventSource } from 'aws-cdk-lib/aws-lambda-event-sources';
در مرحله بعد، دو خط زیر را در زیر تعریف customersFunction اضافه کنید:
consumerFunction.addEventSource(new SqsEventSource(queue));
queue.grantConsumeMessages(consumerFunction);
4.4 – استقرار تابع مصرف کننده
برای استقرار تابع به همراه کد منبع آن، دستور زیر را در دایرکتوری پروژه اجرا کنید:
cdk deploy
این کار استقرار هر منبع جدید یا اصلاح شده را آماده می کند و — دوباره — از شما می خواهد که مجوزهای جدید IAM را دوباره بررسی کنید.
برای تأیید، y را تایپ کنید، و CDK تابع جدید Lambda را به همراه نقش اجرایی آن اجرا می کند و آن را به صف SQS متصل می کند.
هنگامی که استقرار انجام شد، همه چیز آماده و متصل خواهد شد. ببینیم کار میکنه
مرحله 5 – تست پایان به انتها برنامه
برای آزمایش برنامه، ما به صورت دستی تابع تولید کننده را فراخوانی می کنیم تا پیام دیگری به صف ارسال شود. سپس ما گزارش های اجرایی تابع مصرف کننده را بررسی می کنیم تا ببینیم آیا به طور خودکار پیام را راه اندازی و پردازش کرده است.
5.1 – تابع Producer را فراخوانی کنید
مراحل ذکر شده در 3.5 را دنبال کنید – عملکرد Producer را آزمایش کنید تا دوباره تابع تولید کننده را فراخوانی کنید. در اینجا یک خلاصه کوتاه آمده است:
- به لیست عملکرد در داشبورد AWS Lambda بروید.
- تابع Producer را با کلیک بر روی نام آن باز کنید.
- به قسمت کد منبع بروید.
- بر روی دکمه Test کلیک کنید.
- مطمئن شوید که عملکرد با موفقیت اجرا می شود.
5.2 – گزارش عملکرد مصرف کننده را بررسی کنید
به لیست عملکرد در داشبورد AWS Lambda برگردید و این بار تابع Consumer را باز کنید.
به پایین بروید، برگه ای به نام Monitor را باز کنید، در داخل این برگه، برگه Logs را باز کنید و نگاهی به Recent Invocations بیندازید، جایی که باید پیوندی به آخرین LogStream عملکرد پیدا کنید.
پس از آن، روی پیوند جریان ورود به سیستم کلیک کنید. این خود ورودی گزارش را نشان می دهد که اگر به قالب عادت نداشته باشید ممکن است کمی گیج کننده به نظر برسد.
به سادگی به دنبال ورودی درست در وسط بین این دو باشید که با START RequestId: … و END Request ID: … شروع می شود.
بر روی فلش کلیک کنید تا ورودی که در آن باید پیام اصلی را پیدا کنید گسترش یابد:
نتیجه
تبریک می گویم! شما هر آنچه را که برای تنظیم پیامهای نقطه به نقطه ناهمزمان بین دو تابع Lambda نیاز دارید، با استفاده از SQS ایجاد کردهاید.
کارهای بسیار بیشتری می توانید با SQS انجام دهید، مانند دسته بندی پیام ها، اطمینان از ترتیب پیام، و ارسال خودکار پیام های معیوب به یک صف خط مرده (DLQ). اگر می خواهید بیشتر بدانید، راهنمای توسعه دهنده Amazon SQS را بررسی کنید