در این مقاله، ما به اسکریپت powershell کاربر میرویم تا بارها را به صف اتوبوس سرویس لاجورد برسانیم که اگر میخواهید برخی از دادههای موجود بزرگ را پردازش کنید و نمیخواهید فوراً برنامه را بارگذاری کنید، راهی عالی است. بنابراین این مکانیسم روشی کنترل شده برای انجام چنین کاری با کمک صف اتوبوس سرویس لاجوردی فراهم می کند.
همانطور که از نام آن پیداست صف اتوبوس خدمات لاجوردی یک صف است. برنامه های ما می توانند پیام هایی را به این صف ارسال کنند و همچنین می توانند از این صف یک به یک گوش دهند. Services یک راه ساده برای جداسازی کامل و کارآمد اجزا ارائه می دهد. اتوبوس خدماتی پیام را به صورت بادوام ذخیره می کند
در زمینه گذرگاه خدمات دو کاربر وجود دارد
- تهیه کنندگان
- مصرف کنندگان
تولیدکنندگان پیامها را بدون انتظار هیچ پاسخی در صف قرار میدهند.
مصرف کنندگان پیام ها را از صف می خوانند و هیچ تعهدی برای تولیدکنندگان در مورد نحوه پردازش پیام ندارند
بنابراین تولیدکنندگان و مصرف کنندگان مجبور نیستند به ترتیب پیام ها را از صف ارسال یا دریافت کنند و هر دو می توانند پیام را با سرعت خود پردازش کنند.
دو راه وجود دارد که مصرف کنندگان می توانند پیام ها را از اتوبوس سرویس دریافت کنند:
- دریافت و حذف کنید
- اوج و قفل
حالا بیایید با اسکریپت powershell شروع کنیم تا پیامها را به صف گذرگاه سرویس دهی کنیم.
param(
[Parameter (Mandatory = $false)]
[string]
$ResourceGroupName = "",
[Parameter (Mandatory = $false)]
[string]
$NamespaceName = "",
[Parameter(Mandatory = $false)]
[string]
$PolicyName = 'RootManageSharedAccessKey',
[Parameter(Mandatory = $true)]
[string]
$ServiceBusName,
[Parameter(Mandatory = $true)]
[string]
$$Namespace,
[Parameter(Mandatory = $true)]
[string]
$lat,
[Parameter(Mandatory = $true)]
[string]
$long,
[Parameter(Mandatory = $false)]
[string]
$userId,
)
function Send-AzServiceBusMessage
{
$continuationToken = $null
$module = Get-InstalledModule -Name Az.ServiceBus
if($module -ne $null)
{
write-host "module avaiable"
}
else
{
write-host "Az.ServiceBus module not avaiable download in progress"
Install-Module -Name Az.ServiceBus -AllowClobber -force
}
$primaryKey = (Get-AzServiceBusKey -ResourceGroupName $ResourceGroupName -Namespace $namespacename -Name $PolicyName).Primarykey
$message = [pscustomobject] @{ "Body" = "{`"userId`":`"$userId`",`"lat`":$lat, `"long`": $long}"; }
write-host "josn data $message"
$body = $message.Body
$message.psobject.properties.Remove("Body")
#set up the url parameters for the Invoke-WebRequest
$uri = "https://$Namespace.servicebus.windows.net/"+$ServiceBusName+"/messages"
$origin = [DateTime]"1/1/1970 00:00"
$Expiry = (Get-Date).AddMinutes(1)
#compute the token expiration time.
$diff = New-TimeSpan -Start $origin -End $Expiry
$tokenExpirationTime = [Convert]::ToInt32($diff.TotalSeconds)
Add-Type -AssemblyName System.Web
#create the string that will be hashed
$stringToSign = [Web.HttpUtility]::UrlEncode($Namespace) + "`n" + $tokenExpirationTime
#new-up the HMACSHA256 class
$hmacsha = New-Object -TypeName System.Security.Cryptography.HMACSHA256
$hmacsha.Key = [Text.Encoding]::UTF8.GetBytes($primaryKey)
#hash is computed with the HMACSHA256 class instance. The hash is converted to a base 64 string
$hash = $hmacsha.ComputeHash([Text.Encoding]::UTF8.GetBytes($stringToSign))
$signature = [Convert]::ToBase64String($hash)
#creating token here
$token = [string]::Format([Globalization.CultureInfo]::InvariantCulture, "SharedAccessSignature sr={0}&sig={1}&se={2}&skn={3}", [Web.HttpUtility]::UrlEncode($Namespace), [web.HttpUtility]::UrlEncode($signature),$tokenExpirationTime, $PolicyName)
write-host "token : $token"
$headers = @{"Authorization" = "$token"; "Content-Type" = "application/atom+xl;type=entry;charset-utf-g"}
$headers.Add("BrokerProperties", $(ConvertTo-Json -InputObject $Message -Compress))
#Invoke-WebRequest call.
#This invokes the resurce api to push payload to service bus queue
Invoke-WebRequest -Uri $uri -Headers $headers -Method Post -Body $body > $null
}
Send-AzServiceBusMessage
و با استفاده از این می توانیم پیام های خود را به صف های اتوبوس سرویس دهیم.