camel-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Henryk Konsek (Confluence)" <conflue...@apache.org>
Subject [CONF] Apache Camel > Async
Date Fri, 28 Feb 2014 12:43:00 GMT
<html>
    <head>
        <meta name="viewport" content="width=device-width" />
        <base href="https://cwiki.apache.org/confluence" />
        <style type="text/css">
    body, #email-content, #email-content-inner { font-family: Arial,FreeSans,Helvetica,sans-serif; }
    body, p, blockquote, pre, code, td, th, li, dt, dd { font-size: 13px; }
    small { font-size: 11px; }

    body { width:100% !important; -webkit-font-smoothing: antialiased; }

    body,
    #email-wrapper { background-color: #f0f0f0; }
    #email-wrapper-inner { padding: 20px; text-align: center; }
    #email-content-inner { background-color: #fff; border: 1px solid #bbb; color: $menuTxtColour; padding:20px; text-align:left; }
    #email-wrapper-inner > table { width: 100%; }
    #email-wrapper-inner.thin > table { margin: 0 auto; width: 50%; }
    #email-footer { padding: 0 16px 32px 16px; margin: 0; }

    .email-indent { margin: 8px 0 16px 0; }
    .email-comment { margin: 0 0 0 56px; }
    .email-comment.removed { background-color: #ffe7e7; border: 1px solid #df9898; padding: 0 8px;}

    #email-title-avatar { text-align: left; vertical-align: top; width: 48px; padding-right: 8px; }
    #email-title-flavor { margin: 0; padding: 0 0 4px 0; }
    #email-title-heading { font-size: 16px; line-height: 20px; min-height: 20px; margin: 0; padding: 0; }
    #email-title .icon { border: 0; padding: 0 5px 0 0; text-align: left; vertical-align: middle; }

    #email-actions { border-top: 1px solid #bbb; color: #505050; margin: 8px 0 0 0; padding: 0; }
    #email-actions td { padding-top: 8px; }
    #email-actions .left { max-width: 45%; text-align: left; }
    #email-actions .right { text-align: right; }
    .email-reply-divider { border-top: 1px solid #bbb; color: #505050; margin: 32px 0 8px 0; padding: 8px 0; }
    .email-section-title { border-bottom: 1px solid #bbb; margin: 8px 0; padding: 8px 0 0 0; }

    .email-metadata { color: #505050; }

    a { color: #326ca6; text-decoration: none; }
    a:hover { color: #336ca6; text-decoration: underline; }
    a:active {color: #326ca6; }

    a.email-footer-link { color: #505050; font-size: 11px; }

    .email-item-list { list-style: none; margin: 4px 0; padding-left: 0; }
    .email-item-list li { list-style: none; margin: 0; padding: 4px 0; }
    .email-list-divider { color: #505050; padding: 0 0.35em; }
    .email-operation-icon { padding-right: 5px; }

    .avatar { -ms-interpolation-mode: bicubic; border-radius: 3px;}
    .avatar-link { margin: 2px; }

    .tableview th { border-bottom: 1px solid #69C; font-weight: bold; text-align: left; }
    .tableview td { border-bottom: 1px solid #bbbbbb; text-align: left; padding: 4px 16px 4px 0; }

    .aui-message {  margin: 1em 0; padding: 8px; }
    .aui-message.info { background-color: #e0f0ff; border: 1px solid #9eb6d4; }
    .aui-message.success { background-color: #ddfade; border: 1px solid #93c49f; }
    .aui-message.error,
    .aui-message.removed { background-color: #ffe7e7; border: 1px solid #df9898; color: #000; }

    .call-to-action-table { margin: 10px 1px 1px 1px;}
    .call-to-cancel-container, .call-to-action-container { padding: 5px 20px; }
    .call-to-cancel-container { border: 1px solid #aaa; background-color: #eee; border-radius: 3px; }
    .call-to-cancel-container a.call-to-cancel-button { background-color: #eee; font-size: 14px; line-height: 1; padding: 0; margin: 0; color: #666; font-family: sans-serif;}
    .call-to-action-container { border: 1px solid #486582;  background-color: #3068A2; border-radius: 3px; padding: 4px 10px; }
    .call-to-action-container a.call-to-action-button { background-color: #3068A2; font-size: 14px; line-height: 1; padding: 0; margin: 0; color: #fff; font-weight: bold; font-family: sans-serif; }

    /** The span around the inline task checkbox image */
    .diff-inline-task-overlay {
        display: inline-block;
        text-align: center;
        height: 1.5em;
        padding: 5px 0px 1px 5px;
        margin-right: 5px;
        /** Unfortunately, the negative margin-left is stripped out in gmail */
        margin-left: -5px;
    }

            @media handheld, only screen and (max-device-width: 480px) {
        div, a, p, td, th, li, dt, dd { -webkit-text-size-adjust: auto; }
        small, small a { -webkit-text-size-adjust: 90%; }

        td[id=email-wrapper-inner] { padding: 2px !important; }
        td[id=email-content-inner] { padding: 8px !important; }
        td[id="email-wrapper-inner"][class="thin"] > table { text-align: left !important; width: 100% !important; }
        td[id=email-footer] { padding: 8px 12px !important; }
        div[class=email-indent] { margin: 8px 0px !important; }
        div[class=email-comment] { margin: 0 !important; }

        p[id=email-title-flavor] a { display: block; } /* puts the username and the action on separate lines */
        p[id=email-permalink] { padding: 4px 0 0 0 !important; }

        table[id=email-actions] td { padding-top: 0 !important; }
        table[id=email-actions] td.right { text-align: right !important; }
        table[id=email-actions] .email-list-item { display: block; margin: 1em 0 !important; word-wrap: normal !important; }
        span[class=email-list-divider] { display: none; }
    }



        </style>
    </head>
    <body style="font-family: Arial, FreeSans, Helvetica, sans-serif; font-size: 13px; width: 100%; -webkit-font-smoothing: antialiased; background-color: #f0f0f0">
        <table id="email-wrapper" width="100%" cellspacing="0" cellpadding="0" border="0" style="background-color: #f0f0f0">
            <tbody>
                <tr valign="middle">
                    <td id="email-wrapper-inner" style="font-size: 13px; padding: 20px; text-align: center">
                        <table id="email-content" cellspacing="0" cellpadding="0" border="0" style="font-family: Arial, FreeSans, Helvetica, sans-serif; width: 100%">
                            <tbody>
                                <tr valign="top">
                                    <td id="email-content-inner" align="left" style="font-family: Arial, FreeSans, Helvetica, sans-serif; font-size: 13px; background-color: #fff; border: 1px solid #bbb; padding: 20px; text-align: left">
                                        <table id="email-title" cellpadding="0" cellspacing="0" border="0" width="100%">
                                            <tbody>
                                                <tr>
                                                    <td id="email-title-avatar" rowspan="2" style="font-size: 13px; text-align: left; vertical-align: top; width: 48px; padding-right: 8px"> <img class="avatar" src="cid:avatar_10c7e0e76a14e036cae0835edbfd95c0" border="0" height="48" width="48" style="-ms-interpolation-mode: bicubic; border-radius: 3px" /> </td>
                                                    <td valign="top" style="font-size: 13px">
                                                        <div id="email-title-flavor" class="email-metadata" style="margin: 0; padding: 0 0 4px 0; color: #505050">
                                                            <a href="    https://cwiki.apache.org/confluence/display/~hekonsek " style="color:#326ca6;text-decoration:none;; color: #326ca6; text-decoration: none">Henryk Konsek</a> edited the page:
                                                        </div> </td>
                                                </tr>
                                                <tr>
                                                    <td valign="top" style="font-size: 13px"> <h2 id="email-title-heading" style="font-size: 16px; line-height: 20px; min-height: 20px; margin: 0; padding: 0"> <a href="https://cwiki.apache.org/confluence/display/CAMEL/Async" style="color: #326ca6; text-decoration: none"> <img class="icon" src="cid:page-icon" alt="" style="border: 0; padding: 0 5px 0 0; text-align: left; vertical-align: middle" /> <strong style="font-size:16px;line-height:20px;vertical-align:top;">Async</strong> </a> </h2> </td>
                                                </tr>
                                            </tbody>
                                        </table>
                                        <div class="email-indent" style="margin: 8px 0 16px 0">
                                            <p class="aui-message info" style="font-size: 13px; margin: 1em 0; padding: 8px; background-color: #e0f0ff; border: 1px solid #9eb6d4"> <b>Comment:</b> Added executorServiceRef option. </p>
                                            <div class="email-diff">
                                                <div id="page-diffs" class="wiki-content">
                                                    <p class="diff-context-placeholder" style="font-size: 13px">...</p>
                                                    <p class="diff-block-target" style="font-size: 13px">The <a class="confluence-link unresolved" href="#" style="color: #326ca6; text-decoration: none">Request Reply</a> is when the caller sends a message and then <strong>waits for a reply</strong>. This is like the <a class="confluence-link unresolved" href="#" style="color: #326ca6; text-decoration: none"><span class="diff-html-removed" id="removed-diff-0" style="font-size: 100%; background-color: #ffe7e7; text-decoration: line-through;">Http</span></a><span class="diff-html-removed" style="font-size: 100%; background-color: #ffe7e7; text-decoration: line-through;"> </span><a class="confluence-link unresolved" href="#" style="color: #326ca6; text-decoration: none"><span class="diff-html-added" id="added-diff-0" style="font-size: 100%; background-color: #ddfade;">HTTP</span></a><span class="diff-html-added" style="font-size: 100%; background-color: #ddfade;"> </span>protocol that we use every day when we surf the web.<br /> We send a request to fetch a web page and wait until the reply message comes with the web content.</p>
                                                    <p class="diff-context-placeholder" style="font-size: 13px">...</p>
                                                    <p class="diff-block-target" style="font-size: 13px">1. The client sends a sync <a class="confluence-link unresolved" href="#" style="color: #326ca6; text-decoration: none">Request Reply</a> message over <a class="confluence-link unresolved" href="#" style="color: #326ca6; text-decoration: none"><span class="diff-html-removed" id="removed-diff-1" style="font-size: 100%; background-color: #ffe7e7; text-decoration: line-through;">Http</span></a><span class="diff-html-removed" style="font-size: 100%; background-color: #ffe7e7; text-decoration: line-through;"> </span><a class="confluence-link unresolved" href="#" style="color: #326ca6; text-decoration: none"><span class="diff-html-added" id="added-diff-1" style="font-size: 100%; background-color: #ddfade;">HTTP</span></a><span class="diff-html-added" style="font-size: 100%; background-color: #ddfade;"> </span>to Camel. The client application will wait for the response that Camel routes and processes.<br /> 2. The message invokes an external <a class="confluence-link unresolved" href="#" style="color: #326ca6; text-decoration: none">TCP</a> service using synchronous <a class="confluence-link unresolved" href="#" style="color: #326ca6; text-decoration: none">Request Reply</a>. The client application still waits for the response.<br /> 3. The response is send back to the client.</p>
                                                    <p class="diff-context-placeholder" style="font-size: 13px">...</p>
                                                    <p class="diff-block-target" style="font-size: 13px">1. The client sends an <a href="/confluence/display/CAMEL/Async" style="color: #326ca6; text-decoration: none">Async</a> <a class="confluence-link unresolved" href="#" style="color: #326ca6; text-decoration: none">Request Reply</a> message over <a class="confluence-link unresolved" href="#" style="color: #326ca6; text-decoration: none"><span class="diff-html-removed" id="removed-diff-2" style="font-size: 100%; background-color: #ffe7e7; text-decoration: line-through;">Http</span></a><span class="diff-html-removed" style="font-size: 100%; background-color: #ffe7e7; text-decoration: line-through;"> </span><a class="confluence-link unresolved" href="#" style="color: #326ca6; text-decoration: none"><span class="diff-html-added" id="added-diff-2" style="font-size: 100%; background-color: #ddfade;">HTTP</span></a><span class="diff-html-added" style="font-size: 100%; background-color: #ddfade;"> </span>to Camel. The control is immediately returned to the client application, that can continue and do other work while Camel routes the message.<br /> 2. Camel invokes an external <a class="confluence-link unresolved" href="#" style="color: #326ca6; text-decoration: none">TCP</a> service using synchronous <a class="confluence-link unresolved" href="#" style="color: #326ca6; text-decoration: none">Request Reply</a>. The client application can do other work simultaneously.<br /> 3. The client wants to get the reply so it uses the Future handle it got as <em>response</em> from step 1. With this handle it retrieves the reply, wait if nessasary if the reply is not ready.</p>
                                                    <p class="diff-context-placeholder" style="font-size: 13px">...</p>
                                                    <p class="diff-block-target" style="font-size: 13px">1. The client sends a <a class="confluence-link unresolved" href="#" style="color: #326ca6; text-decoration: none">Request only</a> and we can still use <a class="confluence-link unresolved" href="#" style="color: #326ca6; text-decoration: none"><span class="diff-html-removed" id="removed-diff-3" style="font-size: 100%; background-color: #ffe7e7; text-decoration: line-through;">Http</span></a><span class="diff-html-removed" style="font-size: 100%; background-color: #ffe7e7; text-decoration: line-through;"> </span><a class="confluence-link unresolved" href="#" style="color: #326ca6; text-decoration: none"><span class="diff-html-added" id="added-diff-3" style="font-size: 100%; background-color: #ddfade;">HTTP</span></a><span class="diff-html-added" style="font-size: 100%; background-color: #ddfade;"> </span>despite http being <a class="confluence-link unresolved" href="#" style="color: #326ca6; text-decoration: none">Request Reply</a> by nature.<br /> 2. Camel invokes an external <a class="confluence-link unresolved" href="#" style="color: #326ca6; text-decoration: none">TCP</a> service using synchronous <a class="confluence-link unresolved" href="#" style="color: #326ca6; text-decoration: none">Request Reply</a>. The client application is still waiting.<br /> 3. The message is processed completely and the control is returned to the client.</p>
                                                    <p class="diff-context-placeholder" style="font-size: 13px">...</p>
                                                    <p class="diff-block-target" style="font-size: 13px">1. The client sends a <a class="confluence-link unresolved" href="#" style="color: #326ca6; text-decoration: none">Request only</a> and we can still use <a class="confluence-link unresolved" href="#" style="color: #326ca6; text-decoration: none"><span class="diff-html-removed" id="removed-diff-4" style="font-size: 100%; background-color: #ffe7e7; text-decoration: line-through;">Http</span></a><span class="diff-html-removed" style="font-size: 100%; background-color: #ffe7e7; text-decoration: line-through;"> </span><a class="confluence-link unresolved" href="#" style="color: #326ca6; text-decoration: none"><span class="diff-html-added" id="added-diff-4" style="font-size: 100%; background-color: #ddfade;">HTTP</span></a><span class="diff-html-added" style="font-size: 100%; background-color: #ddfade;"> </span>despite http being <a class="confluence-link unresolved" href="#" style="color: #326ca6; text-decoration: none">Request Reply</a> by nature. The control is immediately returned to the client application, that can continue and do other work while Camel routes the message.<br /> 2. Camel invokes an external <a class="confluence-link unresolved" href="#" style="color: #326ca6; text-decoration: none">TCP</a> service using synchronous <a class="confluence-link unresolved" href="#" style="color: #326ca6; text-decoration: none">Request Reply</a>. The client application can do other work simultaneously.<br /> 3. The message completes but no result is returned to the client.</p>
                                                    <p class="diff-context-placeholder" style="font-size: 13px">...</p>
                                                    <p class="diff-block-target" style="font-size: 13px">Suppose we want to call a <a class="confluence-link unresolved" href="#" style="color: #326ca6; text-decoration: none"><span class="diff-html-removed" id="removed-diff-5" style="font-size: 100%; background-color: #ffe7e7; text-decoration: line-through;">Http</span></a><span class="diff-html-removed" style="font-size: 100%; background-color: #ffe7e7; text-decoration: line-through;"> </span><a class="confluence-link unresolved" href="#" style="color: #326ca6; text-decoration: none"><span class="diff-html-added" id="added-diff-5" style="font-size: 100%; background-color: #ddfade;">HTTP</span></a><span class="diff-html-added" style="font-size: 100%; background-color: #ddfade;"> </span>service but it is usually slow and thus we do not want to block and wait for the response, as we can do other important computation. So we can initiate an <a href="/confluence/display/CAMEL/Async" style="color: #326ca6; text-decoration: none">Async</a> exchange to the <a class="confluence-link unresolved" href="#" style="color: #326ca6; text-decoration: none"><span class="diff-html-removed" id="removed-diff-6" style="font-size: 100%; background-color: #ffe7e7; text-decoration: line-through;">Http</span></a><span class="diff-html-removed" style="font-size: 100%; background-color: #ffe7e7; text-decoration: line-through;"> </span><a class="confluence-link unresolved" href="#" style="color: #326ca6; text-decoration: none"><span class="diff-html-added" id="added-diff-6" style="font-size: 100%; background-color: #ddfade;">HTTP</span></a><span class="diff-html-added" style="font-size: 100%; background-color: #ddfade;"> </span>endpoint and then do other stuff while the slow <a class="confluence-link unresolved" href="#" style="color: #326ca6; text-decoration: none"><span class="diff-html-removed" id="removed-diff-7" style="font-size: 100%; background-color: #ffe7e7; text-decoration: line-through;">Http</span></a><span class="diff-html-removed" style="font-size: 100%; background-color: #ffe7e7; text-decoration: line-through;"> </span><a class="confluence-link unresolved" href="#" style="color: #326ca6; text-decoration: none"><span class="diff-html-added" id="added-diff-7" style="font-size: 100%; background-color: #ddfade;">HTTP</span></a><span class="diff-html-added" style="font-size: 100%; background-color: #ddfade;"> </span>service is processing our request. And then a bit later we can use the <code style="font-size: 13px">Future</code> handle to get the response from the <a class="confluence-link unresolved" href="#" style="color: #326ca6; text-decoration: none"><span class="diff-html-removed" id="removed-diff-8" style="font-size: 100%; background-color: #ffe7e7; text-decoration: line-through;">Http</span></a><span class="diff-html-removed" style="font-size: 100%; background-color: #ffe7e7; text-decoration: line-through;"> </span><a class="confluence-link unresolved" href="#" style="color: #326ca6; text-decoration: none"><span class="diff-html-added" id="added-diff-8" style="font-size: 100%; background-color: #ddfade;">HTTP</span></a><span class="diff-html-added" style="font-size: 100%; background-color: #ddfade;"> </span>service. Yeah nice so lets do it:</p>
                                                    <p class="diff-block-target" style="font-size: 13px">First we define some routes in Camel. One for the <a class="confluence-link unresolved" href="#" style="color: #326ca6; text-decoration: none"><span class="diff-html-removed" id="removed-diff-9" style="font-size: 100%; background-color: #ffe7e7; text-decoration: line-through;">Http</span></a><span class="diff-html-removed" style="font-size: 100%; background-color: #ffe7e7; text-decoration: line-through;"> </span><a class="confluence-link unresolved" href="#" style="color: #326ca6; text-decoration: none"><span class="diff-html-added" id="added-diff-9" style="font-size: 100%; background-color: #ddfade;">HTTP</span></a><span class="diff-html-added" style="font-size: 100%; background-color: #ddfade;"> </span>service where we simulate a slow server as it takes at least 1 second to reply. And then other route that we want to invoke while the <a class="confluence-link unresolved" href="#" style="color: #326ca6; text-decoration: none"><span class="diff-html-removed" id="removed-diff-10" style="font-size: 100%; background-color: #ffe7e7; text-decoration: line-through;">Http</span></a><span class="diff-html-removed" style="font-size: 100%; background-color: #ffe7e7; text-decoration: line-through;"> </span><a class="confluence-link unresolved" href="#" style="color: #326ca6; text-decoration: none"><span class="diff-html-added" id="added-diff-10" style="font-size: 100%; background-color: #ddfade;">HTTP</span></a><span class="diff-html-added" style="font-size: 100%; background-color: #ddfade;"> </span>service is on route. This allows you to be able to process the two routes simultaneously:</p>
                                                    <p class="diff-context-placeholder" style="font-size: 13px">...</p>
                                                    <p class="diff-block-target" style="font-size: 13px">Suppose we want to call a <a class="confluence-link unresolved" href="#" style="color: #326ca6; text-decoration: none"><span class="diff-html-removed" id="removed-diff-11" style="font-size: 100%; background-color: #ffe7e7; text-decoration: line-through;">Http</span></a><span class="diff-html-removed" style="font-size: 100%; background-color: #ffe7e7; text-decoration: line-through;"> </span><a class="confluence-link unresolved" href="#" style="color: #326ca6; text-decoration: none"><span class="diff-html-added" id="added-diff-11" style="font-size: 100%; background-color: #ddfade;">HTTP</span></a><span class="diff-html-added" style="font-size: 100%; background-color: #ddfade;"> </span>service but it is usually slow and thus we do not want to block and wait for the response, but instead let a callback gather the response. This allows us to send multiple requests without waiting for the replies before we can send the next request.</p>
                                                    <p class="diff-block-target" style="font-size: 13px">First we define a route in Camel for the <a class="confluence-link unresolved" href="#" style="color: #326ca6; text-decoration: none"><span class="diff-html-removed" id="removed-diff-12" style="font-size: 100%; background-color: #ffe7e7; text-decoration: line-through;">Http</span></a><span class="diff-html-removed" style="font-size: 100%; background-color: #ffe7e7; text-decoration: line-through;"> </span><a class="confluence-link unresolved" href="#" style="color: #326ca6; text-decoration: none"><span class="diff-html-added" id="added-diff-12" style="font-size: 100%; background-color: #ddfade;">HTTP</span></a><span class="diff-html-added" style="font-size: 100%; background-color: #ddfade;"> </span>service where we simulate a slow server as it takes at least 1 second to reply.</p>
                                                    <p class="diff-context-placeholder" style="font-size: 13px">...</p>
                                                    <p class="diff-block-target" style="font-size: 13px">And then we have the client API where we call the <a class="confluence-link unresolved" href="#" style="color: #326ca6; text-decoration: none"><span class="diff-html-removed" id="removed-diff-13" style="font-size: 100%; background-color: #ffe7e7; text-decoration: line-through;">Http</span></a><span class="diff-html-removed" style="font-size: 100%; background-color: #ffe7e7; text-decoration: line-through;"> </span><a class="confluence-link unresolved" href="#" style="color: #326ca6; text-decoration: none"><span class="diff-html-added" id="added-diff-13" style="font-size: 100%; background-color: #ddfade;">HTTP</span></a><span class="diff-html-added" style="font-size: 100%; background-color: #ddfade;"> </span>service using <code style="font-size: 13px">asyncCallback</code> 3 times with different input. As the invocation is <a href="/confluence/display/CAMEL/Async" style="color: #326ca6; text-decoration: none">Async</a> the client will send 3 requests right after each other, so we have 3 concurrent exchanges in progress. The response is gathered by our callback so we do not have to care how to get the response.</p>
                                                    <p class="diff-context-placeholder" style="font-size: 13px">...</p>
                                                    <p class="diff-block-context" style="font-size: 13px">When using the Camel API to create a producer and send an <a class="confluence-link unresolved" href="#" style="color: #326ca6; text-decoration: none">Exchange</a> we do it like this:</p>
                                                    <table class="diff-macro diff-block-target" style="background-color: #f0f0f0;border: 1px solid #dddddd;margin: 10px 1px;padding: 0 2px 2px;width: 100%;">
                                                        <thead>
                                                            <tr>
                                                                <th class="diff-macro-title" style="background-color: transparent; text-align: left; font-weight: normal;padding: 5px;; font-size: 13px"><span class="icon macro-placeholder-icon" style="background-color: ;line-height: 20px;"><img src="https://cwiki.apache.org/confluence/s/en_GB-1988229788/4109/76e0dbb30bc8580e459c201f3535d84f9283a9ac.1/_/plugins/servlet/confluence/placeholder/macro-icon?name=code" style="padding-right: 5px; vertical-align: text-bottom;" /> </span>Code Block</th>
                                                            </tr>
                                                        </thead>
                                                        <tbody>
                                                            <tr>
                                                                <td class="diff-macro-properties" style="background-color: #fafafa; padding: 0 0 0 5px; font-size: 12px; text-align: left;padding: 0; border: 1px solid #dddddd;; font-size: 13px">
                                                                    <table>
                                                                        <tbody>
                                                                            <tr>
                                                                                <td style="background-color: #fafafa; padding: 0 0 0 5px; font-size: 12px; text-align: left;; font-size: 13px"></td>
                                                                                <td style="background-color: #fafafa; padding: 0 0 0 5px; font-size: 12px; text-align: left;; font-size: 13px">java</td>
                                                                            </tr>
                                                                        </tbody>
                                                                    </table> </td>
                                                            </tr>
                                                        </tbody>
                                                        <tbody>
                                                            <tr>
                                                                <td class="diff-macro-body" style="background-color: #fff;border: 1px solid #dddddd;padding: 10px;; font-size: 13px"> <pre style="font-size: 13px">
<span class="diff-html-removed" id="removed-diff-14" style="font-size: 100%; background-color: #ffe7e7; text-decoration: line-through;">
</span>Endpoint endpoint = context.getEndpoint(&quot;http://slowserver.org/myservice&quot;);
Exchange exchange = endpoint.createExchange();
exchange.getIn().setBody(&quot;Order ABC&quot;);
// create a regular producer
Producer producer = endpoint.createProducer();
// send the exchange and wait for the reply as this is synchronous
producer.process(exchange);
</pre> </td>
                                                            </tr>
                                                        </tbody>
                                                    </table>
                                                    <p class="diff-block-context" style="font-size: 13px">But to do the same with <a href="/confluence/display/CAMEL/Async" style="color: #326ca6; text-decoration: none">Async</a> we need a little help from a helper class, so the code is:</p>
                                                    <table class="diff-macro diff-block-target" style="background-color: #f0f0f0;border: 1px solid #dddddd;margin: 10px 1px;padding: 0 2px 2px;width: 100%;">
                                                        <thead>
                                                            <tr>
                                                                <th class="diff-macro-title" style="background-color: transparent; text-align: left; font-weight: normal;padding: 5px;; font-size: 13px"><span class="icon macro-placeholder-icon" style="background-color: ;line-height: 20px;"><img src="https://cwiki.apache.org/confluence/s/en_GB-1988229788/4109/76e0dbb30bc8580e459c201f3535d84f9283a9ac.1/_/plugins/servlet/confluence/placeholder/macro-icon?name=code" style="padding-right: 5px; vertical-align: text-bottom;" /> </span>Code Block</th>
                                                            </tr>
                                                        </thead>
                                                        <tbody>
                                                            <tr>
                                                                <td class="diff-macro-properties" style="background-color: #fafafa; padding: 0 0 0 5px; font-size: 12px; text-align: left;padding: 0; border: 1px solid #dddddd;; font-size: 13px">
                                                                    <table>
                                                                        <tbody>
                                                                            <tr>
                                                                                <td style="background-color: #fafafa; padding: 0 0 0 5px; font-size: 12px; text-align: left;; font-size: 13px"></td>
                                                                                <td style="background-color: #fafafa; padding: 0 0 0 5px; font-size: 12px; text-align: left;; font-size: 13px">java</td>
                                                                            </tr>
                                                                        </tbody>
                                                                    </table> </td>
                                                            </tr>
                                                        </tbody>
                                                        <tbody>
                                                            <tr>
                                                                <td class="diff-macro-body" style="background-color: #fff;border: 1px solid #dddddd;padding: 10px;; font-size: 13px"> <pre style="font-size: 13px">
<span class="diff-html-removed" id="removed-diff-15" style="font-size: 100%; background-color: #ffe7e7; text-decoration: line-through;">
</span>Endpoint endpoint = context.getEndpoint(&quot;http://slowserver.org/myservice&quot;);
Exchange exchange = endpoint.createExchange();
exchange.getIn().setBody(&quot;Order ABC&quot;);
// create a regular producer
Producer producer = endpoint.createProducer();
// normally you will use a shared exectutor service with pools
ExecutorService executor = Executors.newSingleThreadExecutor();
// send it async with the help of this helper
Future&lt;Exchange&gt; future = AsyncProcessorHelper.asyncProcess(executor, producer, exchange);
// here we got the future handle and we can do other stuff while the exchange is being routed in the other asynchronous thread
...
// and to get the response we use regular Java Concurrency API
Exchange response = future.get();
</pre> </td>
                                                            </tr>
                                                        </tbody>
                                                    </table>
                                                    <p class="diff-context-placeholder" style="font-size: 13px">...</p>
                                                    <div class="table-wrap diff-block-target">
                                                        <table class="confluenceTable" style="border-collapse: collapse; border: 1px solid #ddd;">
                                                            <tbody>
                                                                <tr>
                                                                    <th class="confluenceTh" style="border: 1px solid #DDD; padding: 5px 7px; min-width: 0.6em; text-align: left; vertical-align: top;background-color: #F0F0F0; font-weight: bold;; font-size: 13px"> <p style="font-size: 13px">Option</p> </th>
                                                                    <th class="confluenceTh" style="border: 1px solid #DDD; padding: 5px 7px; min-width: 0.6em; text-align: left; vertical-align: top;background-color: #F0F0F0; font-weight: bold;; font-size: 13px"> <p style="font-size: 13px">Description</p> </th>
                                                                </tr>
                                                                <tr>
                                                                    <td class="confluenceTd" style="border: 1px solid #DDD; padding: 5px 7px; min-width: 0.6em; text-align: left; vertical-align: top;; font-size: 13px"> <p style="font-size: 13px">poolSize</p> </td>
                                                                    <td class="confluenceTd" style="border: 1px solid #DDD; padding: 5px 7px; min-width: 0.6em; text-align: left; vertical-align: top;; font-size: 13px"> <p style="font-size: 13px">A number to indicate the core pool size of the underlying Java <code style="font-size: 13px">ExecutorService</code> that is actually doing all the heavy lifting of handling <a href="/confluence/display/CAMEL/Async" style="color: #326ca6; text-decoration: none">Async</a> tasks and correlate replies etc. By default a pool size of 10 is used.</p> </td>
                                                                </tr>
                                                                <tr>
                                                                    <td class="confluenceTd" style="border: 1px solid #DDD; padding: 5px 7px; min-width: 0.6em; text-align: left; vertical-align: top;; font-size: 13px"> <p style="font-size: 13px">maxPoolSize</p> </td>
                                                                    <td class="confluenceTd" style="border: 1px solid #DDD; padding: 5px 7px; min-width: 0.6em; text-align: left; vertical-align: top;; font-size: 13px"> <p style="font-size: 13px">A number to indicate the maximum pool size of the of the underlying Java <code style="font-size: 13px">ExecutorService</code> </p> </td>
                                                                </tr>
                                                                <tr>
                                                                    <td class="confluenceTd" style="border: 1px solid #DDD; padding: 5px 7px; min-width: 0.6em; text-align: left; vertical-align: top;; font-size: 13px"> <p style="font-size: 13px">keepAliveTime</p> </td>
                                                                    <td class="confluenceTd" style="border: 1px solid #DDD; padding: 5px 7px; min-width: 0.6em; text-align: left; vertical-align: top;; font-size: 13px"> <p style="font-size: 13px">A number to indicate how long to keep inactive threads alive</p> </td>
                                                                </tr>
                                                                <tr>
                                                                    <td class="confluenceTd" style="border: 1px solid #DDD; padding: 5px 7px; min-width: 0.6em; text-align: left; vertical-align: top;; font-size: 13px"> <p style="font-size: 13px">timeUnit</p> </td>
                                                                    <td class="confluenceTd" style="border: 1px solid #DDD; padding: 5px 7px; min-width: 0.6em; text-align: left; vertical-align: top;; font-size: 13px"> <p style="font-size: 13px">Time unit for the <code style="font-size: 13px">keepAliveTime</code> option</p> </td>
                                                                </tr>
                                                                <tr>
                                                                    <td class="confluenceTd" style="border: 1px solid #DDD; padding: 5px 7px; min-width: 0.6em; text-align: left; vertical-align: top;; font-size: 13px"> <p style="font-size: 13px">maxQueueSize</p> </td>
                                                                    <td class="confluenceTd" style="border: 1px solid #DDD; padding: 5px 7px; min-width: 0.6em; text-align: left; vertical-align: top;; font-size: 13px"> <p style="font-size: 13px">A number to indicate the maximum number of tasks to keep in the worker queue for the underlying Java <code style="font-size: 13px">ExecutorService</code> </p> </td>
                                                                </tr>
                                                                <tr>
                                                                    <td class="confluenceTd" style="border: 1px solid #DDD; padding: 5px 7px; min-width: 0.6em; text-align: left; vertical-align: top;; font-size: 13px"> <p style="font-size: 13px">threadName</p> </td>
                                                                    <td class="confluenceTd" style="border: 1px solid #DDD; padding: 5px 7px; min-width: 0.6em; text-align: left; vertical-align: top;; font-size: 13px"> <p style="font-size: 13px">To use a custom thread name pattern. See <a class="confluence-link unresolved" href="#" style="color: #326ca6; text-decoration: none">Threading Model</a> for more details.</p> </td>
                                                                </tr>
                                                                <tr>
                                                                    <td class="confluenceTd" style="border: 1px solid #DDD; padding: 5px 7px; min-width: 0.6em; text-align: left; vertical-align: top;; font-size: 13px"> <p style="font-size: 13px">rejectedPolicy</p> </td>
                                                                    <td class="confluenceTd" style="border: 1px solid #DDD; padding: 5px 7px; min-width: 0.6em; text-align: left; vertical-align: top;; font-size: 13px"> <p style="font-size: 13px">How to handle rejected tasks. Can be either <code style="font-size: 13px">Abort</code>, <code style="font-size: 13px">CallerRuns</code>, <code style="font-size: 13px">Discard</code>, or <code style="font-size: 13px">DiscardOldest</code>. See below for more details.</p> </td>
                                                                </tr>
                                                                <tr>
                                                                    <td class="confluenceTd" style="border: 1px solid #DDD; padding: 5px 7px; min-width: 0.6em; text-align: left; vertical-align: top;; font-size: 13px"> <p style="font-size: 13px">callerRunsWhenRejected</p> </td>
                                                                    <td class="confluenceTd" style="border: 1px solid #DDD; padding: 5px 7px; min-width: 0.6em; text-align: left; vertical-align: top;; font-size: 13px"> <p style="font-size: 13px">A boolean to more easily configure between the most common rejection policies. This option is default enabled. <code style="font-size: 13px">true</code> is the same as <code style="font-size: 13px">rejectedPolicy=CallerRuns</code>, and <code style="font-size: 13px">false</code> is the same as <code style="font-size: 13px">rejectedPolicy=Abort</code>.</p> </td>
                                                                </tr>
                                                                <tr>
                                                                    <td class="confluenceTd" style="border: 1px solid #DDD; padding: 5px 7px; min-width: 0.6em; text-align: left; vertical-align: top;; font-size: 13px"> <p style="font-size: 13px">executorService</p> </td>
                                                                    <td class="confluenceTd" style="border: 1px solid #DDD; padding: 5px 7px; min-width: 0.6em; text-align: left; vertical-align: top;; font-size: 13px"> <p style="font-size: 13px">You can provide a custom <code style="font-size: 13px">ExecutorService</code> to use, for instance in a managed environment a J2EE container could provide this service so all thread pools is controlled by the J2EE container.</p> </td>
                                                                </tr>
                                                                <tr>
                                                                    <td colspan="1" class="confluenceTd" style="border: 1px solid #DDD; padding: 5px 7px; min-width: 0.6em; text-align: left; vertical-align: top;; font-size: 13px"><span class="diff-html-added" id="added-diff-14" style="font-size: 100%; background-color: #ddfade;">executorServiceRef</span></td>
                                                                    <td colspan="1" class="confluenceTd" style="border: 1px solid #DDD; padding: 5px 7px; min-width: 0.6em; text-align: left; vertical-align: top;; font-size: 13px"><span class="diff-html-added" style="font-size: 100%; background-color: #ddfade;">You can provide a named reference to the custom </span><code style="font-size: 13px"><span class="diff-html-added" style="font-size: 100%; background-color: #ddfade;">ExecutorService</span></code><span class="diff-html-added" style="font-size: 100%; background-color: #ddfade;"> from the Camel registry. Keep in mind that reference to the custom executor service cannot be used together with the executor-related options (like </span><code style="font-size: 13px"><span class="diff-html-added" style="font-size: 100%; background-color: #ddfade;">poolSize</span></code><span class="diff-html-added" style="font-size: 100%; background-color: #ddfade;"> or </span><code style="font-size: 13px"><span class="diff-html-added" style="font-size: 100%; background-color: #ddfade;">maxQueueSize</span></code><span class="diff-html-added" style="font-size: 100%; background-color: #ddfade;">) as referenced executor service should be configured already.</span></td>
                                                                </tr>
                                                                <tr>
                                                                    <td class="confluenceTd" style="border: 1px solid #DDD; padding: 5px 7px; min-width: 0.6em; text-align: left; vertical-align: top;; font-size: 13px"> <p style="font-size: 13px">waitForTaskToComplete</p> </td>
                                                                    <td class="confluenceTd" style="border: 1px solid #DDD; padding: 5px 7px; min-width: 0.6em; text-align: left; vertical-align: top;; font-size: 13px"> <p style="font-size: 13px"> <strong>@deprecated (removed in Camel 2.4):</strong> Option to specify if the caller should wait for the async task to be complete or not before continuing. The following 3 options is supported: <strong>Always</strong>, <strong>Never</strong> or <strong>IfReplyExpected</strong>. The first two options is self explained. The last will only wait if the message is <a class="confluence-link unresolved" href="#" style="color: #326ca6; text-decoration: none">Request Reply</a> based. The default option is <strong>IfReplyExpected</strong>.</p> </td>
                                                                </tr>
                                                            </tbody>
                                                        </table>
                                                    </div>
                                                    <p class="diff-context-placeholder" style="font-size: 13px">...</p>
                                                    <ul class="alternate diff-block-target">
                                                        <li style="font-size: 13px"> <a class="confluence-link unresolved" href="#" style="color: #326ca6; text-decoration: none">Asynchronous Processing</a> </li>
                                                        <li style="font-size: 13px"> <a class="confluence-link unresolved" href="#" style="color: #326ca6; text-decoration: none">Request Reply</a> </li>
                                                        <li style="font-size: 13px"> <a class="confluence-link unresolved" href="#" style="color: #326ca6; text-decoration: none">Request Only</a> </li>
                                                        <li style="font-size: 13px"> <a href="http://davsclaus.blogspot.com/2009/05/on-road-to-camel-20-concurrency-with.html" class="external-link" rel="nofollow" style="color: #326ca6; text-decoration: none">Blog entry on using async for concurrent file processing</a> </li>
                                                        <li style="font-size: 13px"> <a class="confluence-link unresolved" href="#" style="color: #326ca6; text-decoration: none"><span class="diff-html-removed" id="removed-diff-16" style="font-size: 100%; background-color: #ffe7e7; text-decoration: line-through;">Seda</span></a><a class="confluence-link unresolved" href="#" style="color: #326ca6; text-decoration: none"><span class="diff-html-added" id="added-diff-15" style="font-size: 100%; background-color: #ddfade;">SEDA</span></a> </li>
                                                        <li style="font-size: 13px"> <a class="confluence-link unresolved" href="#" style="color: #326ca6; text-decoration: none">Direct</a> </li>
                                                        <li style="font-size: 13px"> <a class="confluence-link unresolved" href="#" style="color: #326ca6; text-decoration: none">ToAsync</a> for non blocking <a class="confluence-link unresolved" href="#" style="color: #326ca6; text-decoration: none">Request Reply</a> </li>
                                                    </ul>
                                                </div>
                                            </div>
                                        </div>
                                        <table id="email-actions" class="email-metadata" cellspacing="0" cellpadding="0" border="0" width="100%" style="border-top: 1px solid #bbb; color: #505050; margin: 8px 0 0 0; padding: 0; color: #505050">
                                            <tbody>
                                                <tr>
                                                    <td class="left" valign="top" style="font-size: 13px; padding-top: 8px; max-width: 45%; text-align: left"> <span class="email-list-item"><a href="https://cwiki.apache.org/confluence/display/CAMEL/Async" style="color: #326ca6; text-decoration: none">View Online</a> </span> <span class="email-list-divider" style="color: #505050; padding: 0 0.350em">&middot;</span> <span class="email-list-item"><a href="https://cwiki.apache.org/confluence/plugins/likes/like.action?contentId=117116" style="color: #326ca6; text-decoration: none">Like</a> </span> <span class="email-list-divider" style="color: #505050; padding: 0 0.350em">&middot;</span> <span class="email-list-item"><a href="https://cwiki.apache.org/confluence/pages/diffpagesbyversion.action?pageId=117116&amp;revisedVersion=39&amp;originalVersion=38" style="color: #326ca6; text-decoration: none">View Changes</a> </span> </td>
                                                    <td class="right" width="50%" valign="top" style="font-size: 13px; padding-top: 8px; text-align: right"> <span class="email-list-item"><a href="https://cwiki.apache.org/confluence/users/removespacenotification.action?spaceKey=CAMEL" style="color: #326ca6; text-decoration: none">Stop watching space</a> </span> <span class="email-list-divider" style="color: #505050; padding: 0 0.350em">&middot;</span> <span class="email-list-item"><a href="https://cwiki.apache.org/confluence/users/editmyemailsettings.action" style="color: #326ca6; text-decoration: none">Manage Notifications</a> </span> </td>
                                                </tr>
                                            </tbody>
                                        </table> </td>
                                </tr>
                            </tbody>
                        </table> </td>
                </tr>
                <tr>
                    <td id="email-footer" align="center" style="font-size: 13px; padding: 0 16px 32px 16px; margin: 0"> <small style="font-size: 11px"> This message was sent by <a class="email-footer-link" style="color:#505050;font-size:11px;text-decoration:none;; color: #326ca6; text-decoration: none; color: #505050; font-size: 11px" href="http://www.atlassian.com/software/confluence">Atlassian Confluence</a> 5.0.3, <a class="email-footer-link" style="color:#505050;font-size:11px;text-decoration:none;; color: #326ca6; text-decoration: none; color: #505050; font-size: 11px" href="http://www.atlassian.com/software/confluence/overview/team-collaboration-software?utm_source=email-footer">Team Collaboration Software</a> </small> </td>
                </tr>
            </tbody>
        </table>
    </body>
</html>
Mime
View raw message