how to call two endpoints in one sequence in wso2 esb? - wso2

I have 2 apis for 2 insurance companies: car-insurance-company-1 and car-insurance-company-2.
these two take a json data and give me the price of car insurance.
i want to call them both at the same time via an api deployed in wso2 esb.my client needs to get the price of both companies and compare them.
for example the input is: {"type":"Ford","model":"EcoSport"}
and the output is {"company":"company1","price":"1000$"},{"company":"company2","price":"2000$"}
simply speaking i want to call two Endpoints at the same time, in one sequence.i am using wso2 esb 5.
how can i do it?
is there another way?
thanks for your advice.

What you should use is Enterprise Integration Pattern called: Scatter-Gather
In this documentation is described that pattern with wso2 examples. Also the Split-aggregate described in WSO2 ESB 5.0.0 documentation should be helpful. That is all what you need.

Related

How to use product of WSO2 correctly?

I have already read many documentations of WSO2, there are some products of WSO2 such as: Enterprise Integration (EI), API Management (APIM), Identity Access Management (IS), Analytics Stream Processing (SP). I can understand the functions of IS and SP.
1. But I dont know what are differences between EI and APIM?
2. When can we use EI? When can we use APIM?
3. Can we merge WSO2 EI and APIM and IS and SP Products to execute all of them on one server?
Sorry for many questions, but I am really confuse in these matters, please give me advice.
WSO2 EI can be used to integrate different systems, orchestrate and then expose as new services/APIs.
WSO2 APIM can be used to manage those services/APIs. You can manage security, rate limiting, CORS, etc. and can see analytics of API usage etc. too. For APIM analytics, there is a customized version of SP which you can download separately.
You can't run all 4 as a single server. Those are 4 runtimes, so you have to start them separately.

API Manager Analytics

We are working on a solution built on top of WSO2 APIM.
Problem Statement:
We want to add custom capability in existing APIM. Right now if we consume a single api endpoint it gives us meaningful statics some of them are:
API Usage API
API Usage per Application
Top Users per Application
Resource Usage per Application
But what we need is to store some/all incoming request data into database and extract meaningful information over time.
Example:
Suppose we have a api endpoint like below:
HTTP-Verb: POST
URL: http://localhost:9444/subscriptions/1/create_subscription
Params: name:sample_name, type:sample_type, user_id:12345
What we want?
It could be WSO2, OpenAM or any other opensource API manager.
We need to store parameter values e.g. sample_name, sample_type
and user_id in database.
Observations?
Looks like WSO Stream Processor can provide this functionality.
As it has a solution for HTTP Analytics. But we are not certain
to proceed with this option.
Another possible candidate is to Extend API Manager. But docs doesn't have anything to target what we wanted to do.
I am not sure but we can use RequestInterceptor?
Anyone has a experience with this kind of problem please let me know.
There are two problems you have to solve here,
1. Capture the required data from the APIM side
2. Publish to Analytics Server
3. Perform Analytics on received events
As you have observed WSO2 SP can be used for 3.
For 1 & 2, please see blog (https://medium.com/#naduni_pamudika/how-to-publish-custom-attributes-from-wso2-api-manager-to-wso2-analytics-38dd83e8aea2) for extending the publishers to capture and publish additional data.
You can also take a look at OpenIG, it is easy to extend and you can implement your own filter to store request data in database. Another approach is develop your own gateway based on Netflix Zuul or Spring Cloud Gateway

WSO2 BRS to ESB

newbie on ESB and BRS here.
Below message was displayed in WSO2 download page for BRS:
IMPORTANT NOTICE
The WSO2 Business Rules Server (WSO2 BRS) was created as a mechanism to host standalone business rules services. We no longer believe it is well suited for others to use directly, and as such it will no longer be available for download.
We currently have the ability to execute business rules within WSO2 ESB, and we encourage you to continue to use the WSO2 ESB to create business rules services.
If you are currently using WSO2 BRS as a standalone product please contact us
We will of course support it as needed or help you migrate to the right higher level product.
How can I implement this example I saw on youtube https://www.youtube.com/watch?v=O-D2Hgdrzs8 using WSO2 ESB because BRS is no longer promoted.
I don't know also if I got it right, but my understanding is that the mediators like rule mediator is the best fit solution to implement business rules in ESB now. Am I right?
I hope you can help me how to translate the video tutorial from using BRS to ESB in WSO2, or at least if you know some good sites to read and use as reference, then I am happy to visit them as well.
Thank you in advance.

Calling third party APIS like amazon/ebay for getting product details using C++

My requirement is - I have an application and need to get product details from amazon, ebay & few more websites for a product. Please let me know the process for getting the product info & also let me know how could i achieve this using C/C++ language. Does amazon support soap still? some where i saw its not supported. If soap is not supported then whats the next alternative?
You can use eBay API, and amazon API, and if you want to compare data and categories between the two (amazon and eBay), you can Try using http://www.ecommerceapi.org
it's an API that combine between them
For example if you have one categoryId of eBay, Ecommerceapi can tell you what is the match for it in amazon
What ever you choose depends on your requirements of the project, API is simple technology that allows you to query the source over http.

What is the best practices for WSO2 ESB in perticular XSLT transformations

I am working on WSO2 ESB 4.0.3 on MAC OS X Lion (10.7.4)
I would like to know what are the best practices for development for WSO2 ESB 4.0.3.
Currently I am using Data Services Feature in it and existing tomcat application, which we are trying to port to WSO2 ESB, does the SQL query in 2-3 seconds where as WSO2 ESB 4.0.3 with Data Services feature taking around 16-17 secodns.
I would be thankful if some body can let me know best practices for WSO2 and in perticular XSLT transformation.
Hoping for answer.
thanks
Hi Prabath
Here is how my environment is
I am using WSO2 ESB 4.0.3 with Data Services Feature 3.2.2. Proxy service front ends the DS service. Data sources are defined as carbon data sources in datasources.properties.
I tried to run the same service in the WSO2 Data Services Server 2.6.3 and the performance is comparable to what existing tomcat application does but the ESB 4.0.3 with Data Services Feature 3.2.2 takes 8 times more time than tomcat application. Looks like XSLT is not a issue as I thought earlier.
I have all the error handling & input validation in the proxy service which calls this DS.
Also I tried changing it to local for the transport but still same performance issue. Also I have to make sure the format of the forwarded XML is SOAP 12 in the end point definition otherwise proxy service does not forward with local transport.
Can you please suggest so that I can use WSO2 ESB with Data Services Feature 3.2.2 and get comparable performance?
Help really appreciated.
thanks
Abhijit
Hi Prabath
Thanks for reply.
Proxy service validation and transformation is not a problem. Looking at the logs it looks like Data Service deployed in ESB with Data Services feature is taking 8 times more time than the tomcat application. So it is Data Services Feature which is problem I believe and not the proxy service.
Even if we remove the proxy service where you will do the input validations and error handling?
Please let me know.
thanks
Abhijit
Abhijit,
I'm not quite clear of whether this problem is related to executing SQL using dbReport/dbLookup mediators against doing the same thing having data services features installed in ESB OR transforming responses using XSLT at the ESB layer against doing it at the DSS layer.
If it's the former, then you should be able to effectively use the db mediator pair (namely dbLookup and dbreport) to execute simple SQL queries such as SELECT, INSERT, UPDATE, DELETE, etc. However, it is not recommended to do use those mediators to do much complex queries such as stored procedures with "OUT and INOUT" parameters etc as WSO2 DSS is specifically designed to serve any sort of complex queries like that. However, this (using data services) comes at the cost of network latency. Because, you're invoking a data service endpoint through the network which obviously adds the network latency to the end-to-end time taken to get your task done. However, if you're using Data Services features installed in the WSO2 ESB, you always have the option of using "local" transport instead of "http/https" which does an in-JVM call and thus would not dispatch the request over the network.
If this is related to the later, meaning, if you refer to the XSLT transformations, I believe there's no such hard and fast rules in doing this and this would completely depend on your requirements and the usecase. For example, if you're only using WSO2 DSS and want to get some request transformed into a particular format that is expected by the client side, it would only be enough for you to get it done at the WSO2 DSS layer. Because, dispatching it into ESB ONLY for the sake of getting the XSLT transformation done, would add an additional unwanted overhead to the end-to-end completion time of your task. On the other hand, if you're doing this as a part of a configuration flow at the ESB side, then it's perfectly okay to use something like XSLT mediator inside the flow itself.
Hope this helps!
Regards.
Prabath
I hope Prabath already gave the answer to your question.
However, it is not recommended to do use those mediators to do much complex queries such as stored procedures with "OUT and INOUT" parameters etc as WSO2 DSS is specifically designed to serve any sort of complex queries like that. However, this (using data services) comes at the cost of network latency. Because, you're invoking a data service endpoint through the network which obviously adds the network latency to the end-to-end time taken to get your task done. However, if you're using Data Services features installed in the WSO2 ESB, you always have the option of using "local" transport instead of "http/https" which does an in-JVM call and thus would not dispatch the request over the network.