কেন RegisterMessageHandler একটি নির্দিষ্ট বিষয়ের নামের জন্য কাজ করে না?


9

আমি বুঝতে পারছি না যে নীচে নীচে উল্লিখিত নীচের হ্যান্ডলারটি ( প্রসেসমেসেজএেন্সেক ) নির্দিষ্ট বিষয়ের নামের জন্য ট্রিগার করা হচ্ছে না তবে অন্য বিষয়ের নামের জন্য সফল হয়:

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

আমার আজুর পোর্টালে এখানে দুটি বিষয় রয়েছে: এখানে চিত্র বর্ণনা লিখুন

পোর্টালে টপিকগুলি ক্লিক করার বিভিন্ন ফলাফল রয়েছে:

আমি লক্ষ্য করেছি যে এটির সাবস্ক্রিপশন দেখার জন্য আমাকে দুবার "কুরিয়ার-স্বীকৃত" ক্লিক করতে হবে। তবে আমি একবার "কুরিয়ার-অনুরোধ" ক্লিক করতে পারি এবং তত্ক্ষণাত্ এর সাবস্ক্রিপশন দেখতে পারি।


1
I don't receive any exception messages, কারণ আপনি ব্যতিক্রমগুলি গ্রাস করছেন? আমি একের with _পরে একটি ব্লক দেখছিtry
ব্যবহারকারী 1623521

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

আমি আপনার ইস্যুটি আমার পক্ষে পুনরুত্পাদন করতে পারছি না, মনে হচ্ছে আপনি পরিষেবা বাসের পোর্টালে অস্বাভাবিক আচরণটি করেছেন। হতে পারে আপনি এসবি দলে সাপোর্ট টিকিট জমা দিতে পারেন।
জে গং

আমি গতকাল একটি টিকিট জমা দিয়েছি।
স্কট নিমরোড

উত্তর:


0

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

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.