Throttling in OSB
Posted
by Knut Vatsendvik
on Oracle Blogs
See other posts from Oracle Blogs
or by Knut Vatsendvik
Published on Wed, 28 Apr 2010 21:55:16 +0000
Indexed on
2010/04/28
22:18 UTC
Read the original article
Hit count: 727
A common problem with integration is the risk of overloading a particular web service. When the capacity of a web service is reached and it continues to accept connections, it will most likely start to deteriorate.
Fortunately there are 2 techniques, with Oracle Service Bus, that you can apply for protecting this from happening. You can either limit the concurrent number of requests for a Business Service (outbound requests) or you can limit the number of threads processing the requests for a Proxy Service (inbound requests).
Limiting the Concurrent Number of Requests
Limiting the concurrent requests for a Business Service cannot be set at design time so you have to use the built-in Oracle Service Bus Administration Console to do it (/sbconsole). Follow these steps to enable it:
- In Change Center, click Create to start a new Session
- Select Project Explorer, and navigate to the Business Service you want to limit
- Select the Operational Settings tab of the View a Business Service page
- In this tab, under Throttling, select the Enable check box. By enabling throttling you
- Specify a value for Maximum Concurrency
- Specify a positive integer value for Throttling Queue to backlog messages that has exceeded the message concurrency limit
- Specify the maximum time in milliseconds for Message Expiration a message can spend in Throttling Queue
- Click Update
- Click Active in Change Center to active the new settings
If you re-publish the service, it will not overwrite the settings. Only if the resource is renamed or moved, it will.
Please note that a throttling queue is an in-memory queue. Messages that are placed in this queue are not recoverable when a server fails or when you restart a server.
Limiting the Number of Threads
A better approach, in my opinion, is to limit the number of threads that can work with request. Follow these steps to do it:
- Open the WebLogic Server Console (/console)
- In Change Center, click Create to start a new Session
- In the left pane expand Environment and select Work Managers
- In the Global Work Managers page, click New
- Click the Work Manager radio button, then click Next
- Enter a Name for the new Work Manager, and click Next
- In the Available Targets list, select server instances or clusters on which you will deploy applications that reference the Work Manager
- Click Finish.
The new Work Manager now appears in the Global Work Managers page.
- Select the new Work Manager
- Right next to the Maximum Threads Constraint drop-down box, click New
- Click the Maximum Threads Constraint radio button, then click Next
- Enter a Name and a thread Count to be the maximum size to allocate for requests. Click Next
- In the Available Targets list, select server instances or clusters on which you will deploy applications that reference the Work Manager
- Click Finish
- Click Save
- Click Active in Change Center to active your changes. A restart may be necessary.
Puh! Almost there.
- Start a new session. Go to the Service Bus Console (/sbconsole) and find your consuming Proxy Service.
- Click the Edit button of the Transport Configuration tab.
- Click Next
- Set the Dispatch Policy to the new Work Manager
- Click Last
- Click Save
- Click Active in Change Center to active your changes.
© Oracle Blogs or respective owner