How to copy headers to PublishContext/SendContext from ConsumeContext in MassTransit










0















I'm trying copy headers (TenantId basically) when Publish/Send messages during Consuming like MassTransit does with Correlation/Conversation Ids.



There are topics on SO how to modify publish pipeline [1], [2] but all of them add some hardcoded values. But I need to transfer data from Consume to Publish/Send pipelines.



There's method called TransferConsumeContextHeaders which does exactly what I need but I need somehow access ConsumeContext which is not available in ConfigurePublish method.



Thank you in advance.



UPD:
Managed to achieve this like in the code below, however I'm not sure if it's good idea.



var consumeContext = context.GetPayload<ConsumeContext>();
context.TransferConsumeContextHeaders(consumeContext);


Here's full example.










share|improve this question
























  • There's an overload for Publish and Send that accepts a delegate, which can set the headers.

    – Alexey Zimarev
    Nov 12 '18 at 19:31











  • Yes there's, but I need to intercept all Publish and Send and copy headers data from Consume to Publish/Send.

    – Eduard Lepner
    Nov 12 '18 at 19:33






  • 1





    GetPayload is completely legit

    – Alexey Zimarev
    Nov 12 '18 at 20:00






  • 1





    For safety, you might use TryGetPayload and only transfer the headers if the consume context is found.

    – Chris Patterson
    Nov 12 '18 at 20:54















0















I'm trying copy headers (TenantId basically) when Publish/Send messages during Consuming like MassTransit does with Correlation/Conversation Ids.



There are topics on SO how to modify publish pipeline [1], [2] but all of them add some hardcoded values. But I need to transfer data from Consume to Publish/Send pipelines.



There's method called TransferConsumeContextHeaders which does exactly what I need but I need somehow access ConsumeContext which is not available in ConfigurePublish method.



Thank you in advance.



UPD:
Managed to achieve this like in the code below, however I'm not sure if it's good idea.



var consumeContext = context.GetPayload<ConsumeContext>();
context.TransferConsumeContextHeaders(consumeContext);


Here's full example.










share|improve this question
























  • There's an overload for Publish and Send that accepts a delegate, which can set the headers.

    – Alexey Zimarev
    Nov 12 '18 at 19:31











  • Yes there's, but I need to intercept all Publish and Send and copy headers data from Consume to Publish/Send.

    – Eduard Lepner
    Nov 12 '18 at 19:33






  • 1





    GetPayload is completely legit

    – Alexey Zimarev
    Nov 12 '18 at 20:00






  • 1





    For safety, you might use TryGetPayload and only transfer the headers if the consume context is found.

    – Chris Patterson
    Nov 12 '18 at 20:54













0












0








0








I'm trying copy headers (TenantId basically) when Publish/Send messages during Consuming like MassTransit does with Correlation/Conversation Ids.



There are topics on SO how to modify publish pipeline [1], [2] but all of them add some hardcoded values. But I need to transfer data from Consume to Publish/Send pipelines.



There's method called TransferConsumeContextHeaders which does exactly what I need but I need somehow access ConsumeContext which is not available in ConfigurePublish method.



Thank you in advance.



UPD:
Managed to achieve this like in the code below, however I'm not sure if it's good idea.



var consumeContext = context.GetPayload<ConsumeContext>();
context.TransferConsumeContextHeaders(consumeContext);


Here's full example.










share|improve this question
















I'm trying copy headers (TenantId basically) when Publish/Send messages during Consuming like MassTransit does with Correlation/Conversation Ids.



There are topics on SO how to modify publish pipeline [1], [2] but all of them add some hardcoded values. But I need to transfer data from Consume to Publish/Send pipelines.



There's method called TransferConsumeContextHeaders which does exactly what I need but I need somehow access ConsumeContext which is not available in ConfigurePublish method.



Thank you in advance.



UPD:
Managed to achieve this like in the code below, however I'm not sure if it's good idea.



var consumeContext = context.GetPayload<ConsumeContext>();
context.TransferConsumeContextHeaders(consumeContext);


Here's full example.







masstransit






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited Nov 12 '18 at 19:36







Eduard Lepner

















asked Nov 12 '18 at 19:10









Eduard LepnerEduard Lepner

371412




371412












  • There's an overload for Publish and Send that accepts a delegate, which can set the headers.

    – Alexey Zimarev
    Nov 12 '18 at 19:31











  • Yes there's, but I need to intercept all Publish and Send and copy headers data from Consume to Publish/Send.

    – Eduard Lepner
    Nov 12 '18 at 19:33






  • 1





    GetPayload is completely legit

    – Alexey Zimarev
    Nov 12 '18 at 20:00






  • 1





    For safety, you might use TryGetPayload and only transfer the headers if the consume context is found.

    – Chris Patterson
    Nov 12 '18 at 20:54

















  • There's an overload for Publish and Send that accepts a delegate, which can set the headers.

    – Alexey Zimarev
    Nov 12 '18 at 19:31











  • Yes there's, but I need to intercept all Publish and Send and copy headers data from Consume to Publish/Send.

    – Eduard Lepner
    Nov 12 '18 at 19:33






  • 1





    GetPayload is completely legit

    – Alexey Zimarev
    Nov 12 '18 at 20:00






  • 1





    For safety, you might use TryGetPayload and only transfer the headers if the consume context is found.

    – Chris Patterson
    Nov 12 '18 at 20:54
















There's an overload for Publish and Send that accepts a delegate, which can set the headers.

– Alexey Zimarev
Nov 12 '18 at 19:31





There's an overload for Publish and Send that accepts a delegate, which can set the headers.

– Alexey Zimarev
Nov 12 '18 at 19:31













Yes there's, but I need to intercept all Publish and Send and copy headers data from Consume to Publish/Send.

– Eduard Lepner
Nov 12 '18 at 19:33





Yes there's, but I need to intercept all Publish and Send and copy headers data from Consume to Publish/Send.

– Eduard Lepner
Nov 12 '18 at 19:33




1




1





GetPayload is completely legit

– Alexey Zimarev
Nov 12 '18 at 20:00





GetPayload is completely legit

– Alexey Zimarev
Nov 12 '18 at 20:00




1




1





For safety, you might use TryGetPayload and only transfer the headers if the consume context is found.

– Chris Patterson
Nov 12 '18 at 20:54





For safety, you might use TryGetPayload and only transfer the headers if the consume context is found.

– Chris Patterson
Nov 12 '18 at 20:54












1 Answer
1






active

oldest

votes


















0














Based on comments and some wild guesses here's the way how one can access ConsumeContext from Publish/Send: context.TryGetPayload(out ConsumeContext consumeContext).



Then it's possible to do whatever one wants with incoming data like copying some important data to Publish/Send in generic way.






share|improve this answer






















    Your Answer






    StackExchange.ifUsing("editor", function ()
    StackExchange.using("externalEditor", function ()
    StackExchange.using("snippets", function ()
    StackExchange.snippets.init();
    );
    );
    , "code-snippets");

    StackExchange.ready(function()
    var channelOptions =
    tags: "".split(" "),
    id: "1"
    ;
    initTagRenderer("".split(" "), "".split(" "), channelOptions);

    StackExchange.using("externalEditor", function()
    // Have to fire editor after snippets, if snippets enabled
    if (StackExchange.settings.snippets.snippetsEnabled)
    StackExchange.using("snippets", function()
    createEditor();
    );

    else
    createEditor();

    );

    function createEditor()
    StackExchange.prepareEditor(
    heartbeatType: 'answer',
    autoActivateHeartbeat: false,
    convertImagesToLinks: true,
    noModals: true,
    showLowRepImageUploadWarning: true,
    reputationToPostImages: 10,
    bindNavPrevention: true,
    postfix: "",
    imageUploader:
    brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
    contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
    allowUrls: true
    ,
    onDemand: true,
    discardSelector: ".discard-answer"
    ,immediatelyShowMarkdownHelp:true
    );



    );













    draft saved

    draft discarded


















    StackExchange.ready(
    function ()
    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53268609%2fhow-to-copy-headers-to-publishcontext-sendcontext-from-consumecontext-in-masstra%23new-answer', 'question_page');

    );

    Post as a guest















    Required, but never shown

























    1 Answer
    1






    active

    oldest

    votes








    1 Answer
    1






    active

    oldest

    votes









    active

    oldest

    votes






    active

    oldest

    votes









    0














    Based on comments and some wild guesses here's the way how one can access ConsumeContext from Publish/Send: context.TryGetPayload(out ConsumeContext consumeContext).



    Then it's possible to do whatever one wants with incoming data like copying some important data to Publish/Send in generic way.






    share|improve this answer



























      0














      Based on comments and some wild guesses here's the way how one can access ConsumeContext from Publish/Send: context.TryGetPayload(out ConsumeContext consumeContext).



      Then it's possible to do whatever one wants with incoming data like copying some important data to Publish/Send in generic way.






      share|improve this answer

























        0












        0








        0







        Based on comments and some wild guesses here's the way how one can access ConsumeContext from Publish/Send: context.TryGetPayload(out ConsumeContext consumeContext).



        Then it's possible to do whatever one wants with incoming data like copying some important data to Publish/Send in generic way.






        share|improve this answer













        Based on comments and some wild guesses here's the way how one can access ConsumeContext from Publish/Send: context.TryGetPayload(out ConsumeContext consumeContext).



        Then it's possible to do whatever one wants with incoming data like copying some important data to Publish/Send in generic way.







        share|improve this answer












        share|improve this answer



        share|improve this answer










        answered Nov 13 '18 at 8:59









        Eduard LepnerEduard Lepner

        371412




        371412



























            draft saved

            draft discarded
















































            Thanks for contributing an answer to Stack Overflow!


            • Please be sure to answer the question. Provide details and share your research!

            But avoid


            • Asking for help, clarification, or responding to other answers.

            • Making statements based on opinion; back them up with references or personal experience.

            To learn more, see our tips on writing great answers.




            draft saved


            draft discarded














            StackExchange.ready(
            function ()
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53268609%2fhow-to-copy-headers-to-publishcontext-sendcontext-from-consumecontext-in-masstra%23new-answer', 'question_page');

            );

            Post as a guest















            Required, but never shown





















































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown

































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown







            Popular posts from this blog

            Use pre created SQLite database for Android project in kotlin

            Darth Vader #20

            Ondo