ایجاد کار زمانبندی شده در WSO2 (Scheduled Tasks)

WSO2 Micro Integrator را می توان برای اجرای دوره ایtasks  (وظایف یا کارها) پیکربندی کرد. با توجه به اجرای برنامه زمان‌بندی وظایف پیش‌فرض در WSO2 Micro Integrator، یک کار را می‌توان برای ارسال پیام‌ها به یک endpoint تعریف‌شده،  یا به یک سرویس پراکسی یا یک دنباله خاص پیکربندی کرد.

می‌توانید یک کار را برای اجرا پس از یک بازه زمانی ‘t’ برای تعداد ‘n’ دفعه زمان بندی کنید، یا می‌توانید زمانی که سرور شروع به کار کرد، آن کار را برای یک بار برنامه‌ریزی کنید.

همچنین، می‌توانید از CRON استفاده کنید تا کنترل بیشتری بر نحوه برنامه‌ریزی کار داشته باشید. به عنوان مثال، می‌توانید از CRON برای برنامه‌ریزی برای اجرای کار در ساعت 10 شب در روز بیستم هر ماه استفاده کنید.

ویژگی های کار زمان بندی شده در wso2

برای لیست ویژگی هایی که می‌توان هنگام ایجاد یک کار زمان بندی شده پیکربندی کرد، به موضوعات ارائه شده در زیر مراجعه کنید.

ویژگی های مورد نیاز

ویژگی های زیر هنگام ایجاد یک کار زمان بندی شده مورد نیاز است.

پارامتر توضیحات
Task Name نام یک کار برنامه ریزی شده
Task Group گروه synapse.simple.quartz به طور پیش فرض انتخاب می شود.
Task Implementation کلاس پیاده سازی کار پیش فرض (org.apache.synapse.startup.tasks.MessageInjector) Micro Integrator به طور پیش فرض انتخاب می شود. این کلاس به سادگی یک پیام مشخص را به محیط Synapse در هنگام راه اندازی سرور ارسال می‌کند.
اگر می‌خواهید از اجرای کار سفارشی استفاده کنید، دستورالعمل‌های مربوط به
writing tasks  (نوشتن وظایف) را ببینید
Trigger Type نوع trigger (ماشه) زمانبندی اجرای کار را تعیین می کند.

 

 Simple Trigger: کار را به گونه ای برنامه ریزی می کند که تعداد دفعات مشخصی در بازه های زمانی مشخص اجرا شود. در قسمت Count تعداد زمانی که باید انجام شود را وارد کنید و در قسمت Interval فاصله زمانی (بر حسب ثانیه) بین اجرای متوالی کار را وارد کنید. مثال‌های زیر را برای محرک‌های ساده ببینید:

 

برای اجرا فقط یک بار پس از راه اندازی Micro Integrator:

 

<task name=”CheckPrice” class=”org.wso2.esb.tutorial.tasks.PlaceStockOrderTask”>

    <trigger once=”true”/>

    </task>

 

برای اجرای مداوم هر 5 ثانیه:

 

<task name=”CheckPrice” class=”org.wso2.esb.tutorial.tasks.PlaceStockOrderTask”>

    <trigger interval=”5″/>

    </task>

 

برای اجرای هر 5 ثانیه به مدت 10 بار:

 

<task name=”CheckPrice” class=”org.wso2.esb.tutorial.tasks.PlaceStockOrderTask”>

    <trigger interval=”5″ count=”10″/>

    </task>

Cron Trigger: کار را طبق Cron زمان بندی می کند. مثال زیر را برای ماشه acron ببینید که در آن کار قرار است در ساعت 1:30 بامداد اجرا شود:

 

<task name=”CheckPrice” class=”org.wso2.esb.tutorial.tasks.PlaceStockOrderTask”>

    <trigger cron=”0 30 1 * * ?”/>

    </task>

Pinned Servers لیست نود های سرور Micro Integrator که وظیفه را اجرا می کنند. می توانید آدرس IP گره های مورد نیاز را مشخص کنید.

 

توجه: اگر می‌خواهید کار روی مجموعه‌ای از نودهای انتخاب شده در یک کلاستر از محصول اجرا شود، می‌توان از این تنظیم استفاده کرد. توجه داشته باشید که وظیفه در هر زمان فقط روی یکی از نود ها اجرا می شود. سرورهای پین شده رفتار پیش‌فرض رسیدگی به وظایف تعریف شده در سطح سرور (برای این کار خاص) را لغو می‌کنند. با این حال، اگر مدیریت کار مبتنی بر قانون در سطح سرور مشخص شده باشد، باید اطمینان حاصل کنید که همان نودهای سروری که به عنوان سرورهای پین شده برای کار مشخص می‌کنید، برای قانون رسیدگی به کار در سطح سرور نیز مشخص شده‌اند.

ویژگی های اجرای کار

در زیر، ویژگی‌های اجرای کار اختیاری وجود دارد که می‌توانید هنگام ایجاد یک کار زمان‌بندی شده از آنها استفاده کنید.

 

پارامتر توضیحات
message بدنه درخواستی را که باید هنگام اجرای کار ارسال شود، مشخص کنید.

 

توجه: ارائه یک مقدار برای ویژگی پیام الزامی است. بنابراین، حتی اگر نمی‌خواهید یک متن پیام ارسال کنید، باید یک پیام خالی به عنوان مقدار ارائه کنید تا از ایجاد exception (استثنا) جلوگیری کنید.

soapAction این عمل SOAP برای استفاده هنگام ارسال پیام به نقطه پایانی است.
to اگر وظیفه باید پیام را مستقیماً از طریق دنباله اصلی به نقطه پایانی ارسال کند، آدرس نقطه پایانی باید مشخص شود. به عنوان مثال، اگر آدرس نقطه پایانی http://localhost:9000/services/SimpleStockQuoteService باشد، پیکربندی Synapse وظیفه برنامه ریزی شده به صورت زیر خواهد بود:

 

<task class=”org.apache.synapse.startup.tasks.MessageInjector” group=”synapse.simple.quartz” name=”CheckPrice”>        <property name=”to” value=”http://localhost:9000/services/SimpleStockQuoteService”/>

            <property name=”soapAction” value=”urn:getQuote”/>

            <property name=”message”>

                <m0:getQuote xmlns:m0=”http://services.samples” xmlns=”http://ws.apache.org/ns/synapse”>

                    <m0:request>

                        <m0:symbol>IBM</m0:symbol>

                    </m0:request>

                </m0:getQuote>

            </property>

            <trigger interval=”5″/>

        </task>

injectTo اگر وظیفه پیام را مستقیماً به نقطه پایانی (از طریق دنباله اصلی) ارسال نمی کند، باید به سرویس پروکسی یا یک دنباله ارسال شود.
sequenceName اگر وظیفه باید پیام را به یک دنباله ارسال کند (پارامتر injectTo دنباله است)، نام دنباله را وارد کنید. به عنوان مثال، اگر نام دنباله “SampleSequence” باشد، پیکربندی synapse وظیفه برنامه ریزی شده به صورت زیر خواهد بود:

<task name=”SampleInjectToSequenceTask”

             class=”org.apache.synapse.startup.tasks.MessageInjector”

             group=”synapse.simple.quartz”>

          <trigger count=”2″ interval=”5″/>

   

          <property xmlns:task=”http://www.wso2.org/products/wso2commons/tasks”

   

                    name=”injectTo”

                    value=”sequence”/>

   

          <property xmlns:task=”http://www.wso2.org/products/wso2commons/tasks” name=”message”>

             <m0:getQuote xmlns:m0=”http://services.samples”>

                <m0:request>

                   <m0:symbol>IBM</m0:symbol>

                </m0:request>

             </m0:getQuote>

          </property>

   

          <property xmlns:task=”http://www.wso2.org/products/wso2commons/tasks”

   

                    name=”sequenceName”

                    value=”SampleSequence”/>

   

       </task>

proxyName

اگر وظیفه باید پیام را به یک سرویس پراکسی ارسال کند (پارامتر injectTo پروکسی است)، نام سرویس پروکسی را وارد کنید. به عنوان مثال، اگر نام سرویس پراکسی “SampleProxy” باشد، پیکربندی synapse وظیفه برنامه ریزی شده به صورت زیر خواهد بود:

<task name=”SampleInjectToProxyTask”

             class=”org.apache.synapse.startup.tasks.MessageInjector”

             group=”synapse.simple.quartz”>

          <trigger count=”2″ interval=”5″/>

          <property xmlns:task=”http://www.wso2.org/products/wso2commons/tasks” name=”message”>

             <m0:getQuote xmlns:m0=”http://services.samples”>

                <m0:request>

                   <m0:symbol>IBM</m0:symbol>

                </m0:request>

             </m0:getQuote>

          </property>

   

          <property xmlns:task=”http://www.wso2.org/products/wso2commons/tasks”

   

                    name=”proxyName”

                    value=”SampleProxy”/>

   

          <property xmlns:task=”http://www.wso2.org/products/wso2commons/tasks”

                   

                    name=”injectTo”

                    value=”proxy”/>

   

       </task>

Scheduling ESB Tasks (برنامه ریزی وظایف ESB)

دستورالعمل های داده شده در زیر را برای ایجاد یک کار زمان بندی شده در WSO2 Integration Studio دنبال کنید. در ادامه این مطلب پیشنهاد می‌شود بخوانید: wso2 چیست ؟

دستورالعمل ها

  1. روی ESB Config projectکلیک راست کرده و New → Scheduled Task را کلیک کنید.

 

ایجاد کار زمانبندی شده در WSO2

  1. Create a New Scheduled Task Artifact را انتخاب کنید و روی Next کلیک کنید.

 

 

ایجاد کار زمانبندی شده در WSO2

 

  1. مقادیری را برای پارامتر مورد نیاز برای کار برنامه ریزی شده مشخص کنید.

 

 

ایجاد کار زمانبندی شده در WSO2

 

 

  1. مکان ذخیره artifact را مشخص کنید:
  • برای ذخیره scheduled task (کار برنامه ریزی شده) در یک پروژه ESB Config موجود در فضای کاری خود، روی Browse کلیک کنید و آن پروژه را انتخاب کنید.
  • برای ذخیره کار برنامه ریزی شده در یک پروژه پیکربندی جدید ESB، روی Create new Project کلیک کنید و پروژه جدید را ایجاد کنید.
  1. روی Finish کلیک کنید.
    وظیفه برنامه ریزی شده در پوشه src/main/synapse-config/tasks تحت پروژه ESB Config که شما مشخص کرده اید ایجاد می شود.
  2. برای استفاده از کار برنامه ریزی شده، ویژگی ها را به روز کنید:

به روز رسانی ویژگی ها

ویژگی‌های کار را به‌روزرسانی کنید تا پیام ورودی که باید کار را آغاز کند و مقصدی که پیام باید به آن ارسال شود را مشخص کنید.

  1. artifact جدید را از explorer (کاوشگر) پروژه باز کنید.

 

ایجاد کار زمانبندی شده در WSO2

 

  1. در نمای Form، می‌توانید به صورت اختیاری مقادیر ویژگی‌های مشخص شده را تغییر دهید.
  1. روی Task Implementation Properties کلیک کنید تا کادر Task Properties باز شود.

 

 

ایجاد کار زمانبندی شده در WSO2

 

  1. ویژگی ها را به روز کنید.

مثال ارسال پیام به نقطه پایانی RESTful به صورت زمان‌بندی شده

به منظور استفاده از Message Injector برای ارسال پیام ها به نقطه پایانی RESTful، می توانید ارسال کننده را با ویژگی‌های مورد نیاز مشخص کنید و پیام را به ترتیب ارسال نمائید. نمونه زیر ارسال پیام RESTful را از طریق یک سرویس پروکسی نشان می دهد.

Synapse configurations

در زیر artifacts  یکپارچه سازی وجود دارد که می توانیم برای اجرای این سناریو استفاده کنیم. دستورالعمل نحوه ساخت و اجرای این مثال را ببینید.

Scheduled Task

<task class=“org.apache.synapse.startup.tasks.MessageInjector” group=“synapse.simple.quartz” name=”SampleInjectToProxyTask” xmlns=”http://ws.apache.org/ns/synapse”>

    <trigger count=”2″ interval=”5″/>

    <property name=“injectTo” value=”proxy” xmlns:task=”http://www.wso2.org/products/wso2commons/tasks”/>

    <property name=“message” xmlns:task=”http://www.wso2.org/products/wso2commons/tasks”>

        <request xmlns=””>

            <location>

                <city>Tehran</city>

                <country>IR</country>

            </location>

        </request>

    </property>

    <property name=“proxyName” value=“SampleProxy” xmlns:task=”http://www.wso2.org/products/wso2commons/tasks”/>

</task>

 

Proxy Service

<?xml version=”1.0″ encoding=”UTF-8″?>

<proxy name=“SampleProxy” startOnLoad=“true” transports=“http https

xmlns = “http://ws.apache.org/ns/synapse

    <target>

        <inSequence>

            <property expression=“//request/location/city” name=“uri.var.city” scope=”default” type=”STRING“/>

            <property expression=“//request/location/country” name=“uri.var.cc” scope=“default” type=“STRING

            <log>

                <property expression=“get-property(‘uri.var.city’)

 < /” name=“Which city  

                <property expression=“get-property(‘uri.var.cc’)

    name=“Which country

            </log>

            <send>

                <endpoint name=”EP”>

                    <http method=“get” uri-template=”http://api.openweathermap.org/data/2.5/weather?q={uri.var.city},{uri.var.cc}&amp;APPID=ae2a70399cf2c35940a6538f38fee3d3″/>

                </endpoint>

            </send>

        </inSequence>

        <outSequence>

            <log level=”full”/>

        </outSequence>

        <faultSequence/>

    </target>

</proxy>

ساخت و اجرا

ایجاد artifact:

  1. WSO2 Integration Studio را راه اندازی کنید.
  2. با یک ماژول ESB Configs و یک Composite Exporter یک پروژه Integration ایجاد کنید.
  3. با تنظیمات داده شده در بالا، سرویس پروکسی و یک کار برنامه ریزی شده ایجاد کنید.
  4. Deploy the artifacts (artifact را در Micro Integrator خود مستقر کنید.)
  5. تمام شد! در گزارش‌های Micro Integrator این پیام‌ها به فاصله ۵ ثانیه چاپ می‌شوند:

INFO {org.apache.synapse.mediators.builtin.LogMediator} – Which city? = Tehran, Which country? = IRs

این مطلب چقدر مفید بود ؟

روی یک ستاره کلیک کنید تا به آن امتیاز دهید

میانگین امتیاز / 5. نتایج آرا:

تاکنون رأی ندارید! اولین نفری باشید که به این پست امتیاز می دهد.

بدون دیدگاه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *