আমি বুঝতে পারছি না যে নীচে নীচে উল্লিখিত নীচের হ্যান্ডলারটি ( প্রসেসমেসেজএেন্সেক ) নির্দিষ্ট বিষয়ের নামের জন্য ট্রিগার করা হচ্ছে না তবে অন্য বিষয়ের নামের জন্য সফল হয়:
subscriptionClient.RegisterMessageHandler(processMessageAsync, msgOptions)
নিম্নলিখিতটি আমার গ্রাহক শ্রেণি:
open System
open System.Linq
open System.Threading
open System.Text
open System.Threading.Tasks
open Microsoft.Azure.ServiceBus
type Subscriber(connectionString:string, topic:string, subscription:string) =
let mutable subscriptionClient : SubscriptionClient = null
let exceptionReceivedHandler (args:ExceptionReceivedEventArgs) =
printfn "Got an exception: %A" args.Exception
Task.CompletedTask
let processMessageAsync (message:Message) (_:CancellationToken) =
try
let _ = Encoding.UTF8.GetString(message.Body)
subscriptionClient.CompleteAsync(message.SystemProperties.LockToken) |> Async.AwaitTask |> Async.RunSynchronously
Task.CompletedTask
with
_ -> Task.CompletedTask
member x.Listen() =
async {
subscriptionClient <- new SubscriptionClient(connectionString, topic, subscription)
subscriptionClient.OperationTimeout <- TimeSpan.FromMinutes(3.0)
let! rulesFound = subscriptionClient.GetRulesAsync() |> Async.AwaitTask
let hasDefaultRule = rulesFound.Any(fun r -> r.Name = RuleDescription.DefaultRuleName)
if hasDefaultRule then
do! subscriptionClient.RemoveRuleAsync(RuleDescription.DefaultRuleName) |> Async.AwaitTask
let msgOptions = MessageHandlerOptions(fun args -> exceptionReceivedHandler(args))
msgOptions.AutoComplete <- false
msgOptions.MaxAutoRenewDuration <- TimeSpan.FromMinutes(1.0)
msgOptions.MaxConcurrentCalls <- 1
subscriptionClient.RegisterMessageHandler(processMessageAsync, msgOptions)
}
member x.CloseAsync() =
async {
do! subscriptionClient.CloseAsync() |> Async.AwaitTask
}
আমি কীভাবে গ্রাহক চালানোর চেষ্টা করছি :
open System
open Subscription.Console
let connectionString = <connection_string>
[<EntryPoint>]
let main argv =
printfn "Welcome to Subscription.Console"
let topic,subscription = "Topic.courier-accepted","Subscription.all-messages"
let subscriber = Subscriber(connectionString, topic, subscription)
async { do! subscriber.Listen()
} |> Async.RunSynchronously
Console.ReadKey() |> ignore
async { do! subscriber.CloseAsync()
} |> Async.RunSynchronously
0 // return an integer exit code
নিম্নলিখিত কোডটি এমন একটি বার্তা প্রকাশ করেছে যা আমার গ্রাহককে গ্রহণ করতে হবে (তবে তা নয়):
[<Fact>]
let ``Publish courier-accepted to servicebus``() =
async {
// Setup
let client = TopicClient(sbConnectionstring, "Topic.courier-accepted")
let! requestId = requestId()
let updated = requestId |> modifyRequestId someCourierResponse
let json = JsonConvert.SerializeObject(updated)
let message = Message(Encoding.UTF8.GetBytes(json))
message.Label <- sprintf "request-id(%s)" (requestId.ToString())
// Test
do! client.SendAsync(message) |> Async.AwaitTask
// Teardown
do! client.CloseAsync() |> Async.AwaitTask
}
বিঃদ্রঃ:
উপরের কোডটি সম্পর্কে আকর্ষণীয় বিষয়টি হ'ল আমি যখন সার্ভারবাসট্রিগার দিয়ে একই বিষয় এবং সাবস্ক্রিপশনের নাম সেট করে একটি অ্যাজুরে ফাংশন নিয়ে থাকি তখন প্রতিবার পরীক্ষা চালানোর সময় আজার ফাংশনটি ট্রিগার হয়।
- আমি কোনও ব্যতিক্রম বার্তা পাই না
- ব্যতিক্রমগ্রাহক হ্যান্ডলার ফাংশনটি আমার গ্রাহক উদাহরণে কখনই ট্রিগার হয় না
- সার্ভিস রিসোর্সের জন্য আমি আমার অ্যাজুর ড্যাশবোর্ডে কোনও ব্যবহারকারীর ত্রুটি পর্যবেক্ষণ করি না
বিভিন্ন বিষয়ের নাম সাফল্য
যদি আমি বিষয়টির নামটি "কুরিয়ার-অনুরোধ" করে রাখি তবে গ্রাহক উদাহরণটি বার্তা গ্রহণ করবে:
[<Fact>]
let ``Publish courier-requested to servicebus topic``() =
// Setup
let client = TopicClient(sbConnectionstring, "Topic.courier-requested")
let message = Message(Encoding.UTF8.GetBytes(JsonFor.courierRequest))
message.Label <- sprintf "courier-id(%s)" "b965f552-31a4-4644-a9c6-d86dd45314c4"
// Test
async {
do! client.SendAsync(message) |> Async.AwaitTask
do! client.CloseAsync() |> Async.AwaitTask
}
এখানে সাবস্ক্রিপশনে বিষয়টির নাম সমন্বয় রয়েছে:
[<EntryPoint>]
let main argv =
printfn "Welcome to Subscription.Console"
let topic,subscription = "Topic.courier-requested","Subscription.all-messages"
let subscriber = Subscriber(connectionString, topic, subscription)
async { do! subscriber.Listen()
} |> Async.RunSynchronously
Console.ReadKey() |> ignore
async { do! subscriber.CloseAsync()
} |> Async.RunSynchronously
0 // return an integer exit code
আমার আজুর পোর্টালে এখানে দুটি বিষয় রয়েছে:
পোর্টালে টপিকগুলি ক্লিক করার বিভিন্ন ফলাফল রয়েছে:
আমি লক্ষ্য করেছি যে এটির সাবস্ক্রিপশন দেখার জন্য আমাকে দুবার "কুরিয়ার-স্বীকৃত" ক্লিক করতে হবে। তবে আমি একবার "কুরিয়ার-অনুরোধ" ক্লিক করতে পারি এবং তত্ক্ষণাত্ এর সাবস্ক্রিপশন দেখতে পারি।
I don't receive any exception messages
, কারণ আপনি ব্যতিক্রমগুলি গ্রাস করছেন? আমি একেরwith _
পরে একটি ব্লক দেখছিtry