我是WSO2 ESB的新手,我有一个具有这种特定行为的自定义消息处理器:在从消息存储中检索元素之后,在执行与此消息处理器相关的序列之前执行操作.
我试着详细解释一下.
这是我的ESB消息处理器定义:
<?xml version="1.0" encoding="UTF-8"?>
<!---<messageProcessor class="org.apache.synapse.message.processor.impl.sampler.SamplingProcessor" messageStore="transferFromMessageStore" name="transferFromMessageProcessor" xmlns="http://ws.apache.org/ns/synapse">-->
<messageProcessor class="com.mycompany.toolkit.messageprocessor.SamplingProcessorHeaderRateLimitation" messageStore="transferFromMessageStore" name="transferFromMessageProcessor" xmlns="http://ws.apache.org/ns/synapse">
<parameter name="sequence">transferProcessorSequence</parameter>
<parameter name="interval">1000</parameter>
<parameter name="is.active">true</parameter>
<parameter name="concurrency">1</parameter>
</messageProcessor>
Run Code Online (Sandbox Code Playgroud)
它从transferFromMessageStore(队列)中检索一些元素(XML文档),并将此对象传递给使用它的transferProcessorSequence.xml序列.正如您在此时所看到的,我已经实现了一个自定义消息处理器SamplingProcessorHeaderRateLimit,它只是扩展了org.apache.synapse.message.processor.impl.sampler.SamplingProcessor WSO2类.此时,它仅在执行init()方法时显示日志.我将它部署在我的Carbon服务器上,它可以工作.
在这里,您可以找到整个项目代码.
好但是从我所理解的获得所需的行为我不必简单地扩展SamplingProcessor类,因为为了在每个消息消耗和调度序列之间进行自定义实现,需要扩展类SamplingService类,这一个.
我认为我需要覆盖execute()或fetch(MessageConsumer msgConsumer).
此时应该还可以插入日志,每次从消息存储库中检索元素时都会写入日志文件,在此之前执行与消息处理器相关的序列.
可能吗?
所以我的主要主要是:
1)我是否要创建一个将SamplingService类扩展到我实现自定义消息处理器的同一项目中的类(此行为必须仅用于我的WSO2 ESB项目中的此特定消息处理器,所有其他使用的消息处理器在这个项目中必须使用标准的SamplingService实现).
2)另一个疑问与此自定义SamplingService实现如何传递给我的自定义消息处理器有关.进入SamplingProcessor WSO2类(如何将特定的自定义消息处理器实现与处理其生命周期的自定义SamplingService实现相关联).
我正在研究这个材料用于WSO2 ESB认证:
https://wso2.com/training/enterprise-integrator-developer-fundamentals#request_training_enroll
在"下载实验工具包"部分中,有一个关于如何设置入站端点的教程.基本上它只是简单地为此先前实现的教程项目添加入站端点:
https://docs.wso2.com/display/EI611/Sending+a+Simple+Message+to+a+Service
我已经完成了它并且它工作正常,基本上在我的项目中我有这个REST API:
<?xml version="1.0" encoding="UTF-8"?>
<api context="/healthcare" name="HealthcareAPI" xmlns="http://ws.apache.org/ns/synapse">
<resource methods="GET" uri-template="/querydoctor/{category}">
<inSequence>
<log description="Request Log" level="custom">
<property name="message" value="Welcome to HealthcareService"/>
</log>
<send>
<endpoint key="QueryDoctorEP"/>
</send>
</inSequence>
<outSequence>
<send/>
</outSequence>
<faultSequence/>
</resource>
</api>
Run Code Online (Sandbox Code Playgroud)
可以通过以下声明直接调用:
curl -v http://localhost:8280/healthcare/querydoctor/surgery
Run Code Online (Sandbox Code Playgroud)
然后我将此入站端点添加到项目中:
<?xml version="1.0" encoding="UTF-8"?>
<inboundEndpoint name="QueryDoctorInboundEndpoint" protocol="http" suspend="false" xmlns="http://ws.apache.org/ns/synapse">
<parameters>
<parameter name="inbound.http.port">8285</parameter>
<parameter name="dispatch.filter.pattern">/healthcare/querydoctor/.*</parameter>
</parameters>
</inboundEndpoint>
Run Code Online (Sandbox Code Playgroud)
这意味着我也可以使用这个新的映射URL调用此服务:
curl -v http://localhost:8285/healthcare/querydoctor/surgery
Run Code Online (Sandbox Code Playgroud)
我正在使用另一个端口,因为此入站端点正在执行此映射:
<parameter name="dispatch.filter.pattern">/healthcare/querydoctor/.*</parameter>
Run Code Online (Sandbox Code Playgroud)
我的疑问是:为什么我要使用入站端点而不是我的REST API的经典URL?有什么好处或可能的用例?
我尝试阅读有关此端点类型的官方文档页面:https …
我有一个名为:的 LocalEntry Test
,内容如下并保存在本地文件系统中。
<test>
<value1>a</value1>
</test>
Run Code Online (Sandbox Code Playgroud)
我可以value1
使用这样的属性检索:
<property name="value" expression="get-property('Test')/*[local-name()='value1']/text()" type="string" scope="default" />
但是,我无法通过属性中介器或丰富中介器更改 LocalEntry 文件的内容,我的丰富配置如下:
<enrich>
<source clone="true" xpath="$ctx:newValue"/>
<target xpath="get-property('Test')/*[local-name()='value1']/text()"/>
</enrich>
Run Code Online (Sandbox Code Playgroud)
我在 ESB-5.0.0 中有这个确切的配置,它就像一个魅力。
为什么我不能在 EI-6.6.0 中做同样的事情?有什么替代解决方案吗?
我正在安装WSO2 EI 6.1.1
integrator --run :
https://localhost:9445/carbon/admin/login.jsp -> OK
wso2serber.bat : EI-Business-Process Server
https://localhost:9445/carbon/admin/login_action.jsp
Error 403 - Forbidden
[EI-Business-Process] WARN {org.owasp.csrfguard.log.JavaLogger} - potential cross-site request forgery (CSRF) attack thwarted (user:<anonymous>, ip:192.168.1.11, method:POST, uri:/carbon/admin/login_action.jsp, error:required token is missing from the request)
and wso2serber.bat : EI-Analytics
https://localhost:9444/carbon/admin/login_action.jsp
Error 403 - Forbidden
[EI-Analytics] WARN {org.owasp.csrfguard.log.JavaLogger} - potential cross-site request forgery (CSRF) attack thwarted (user:<anonymous>, ip:192.168.1.11, method:POST, uri:/carbon/admin/login_action.jsp, error:required token is missing from the request)
Run Code Online (Sandbox Code Playgroud)
我该如何解决这个问题?如何使WSO2 WSO2 EI下的wso2 Business Process Server管理控制台可用?
wso2 bpmn wso2esb wso2-business-process wso2-enterprise-integrator
我必须创建并配置两个节点的WSO2 EI集群。特别是,我必须将ESB配置文件和MB配置文件聚类。
我对此有一些架构上的疑问:
聚类ESB配置文件的疑问:
我的假设基于此文档:https : //docs.wso2.com/display/EI640/Clustering+the+ESB+Profile
我发现此部分:
请注意,某些生产环境不支持多播。但是,如果您的环境支持多播,则将其用作成员身份方案没有任何问题
不支持多播的原因可能是什么?(所以我可以告知它可能存在的问题)。在表格中(在上一个链接内),在我看来,可能的问题可能与以下几点有关:
从系统\网络工程师处获取此信息是否足以决定是否继续使用多播选项?
使用多播而不是WKA,我需要执行与“安装注册表”和“创建\连接到数据库”有关的第一个部署方案(基于WKA的方案)中列出的相同配置步骤(如第一个文档链接所示) )?
在向群集添加新节点时,使用多播而不是WKA是否可以使我不停止服务?
群集MB配置文件:
据我了解,MB配置文件群集只能使用WKA作为成员身份方案。使用WKA是否意味着在向群集添加新节点时必须停止服务?
那么最后我们是否可以考虑ESB群集和MB群集两个不同的群集?ESB群集(如果使用多播配置)是否需要在添加新节点而停止MB群集以添加新节点时停止该服务?
wso2 cluster-computing wso2esb wso2-message-broker wso2-enterprise-integrator
如何从wso2代理服务调用python脚本文件。
我们尝试使用send mediator调用位于我本地计算机上的python脚本文件。
<?xml version="1.0" encoding="UTF-8"?>
<proxy xmlns="http://ws.apache.org/ns/synapse"
name="FilepythonTest"
transports="http https"
startOnLoad="true">
<description/>
<target >
<inSequence>
<send>
<endpoint>
<address uri="local:///Users/vikashsaharan/Desktop/python/testpy.py"/>
</endpoint>
</send>
</inSequence>
<outSequence>
<log level="full"/>
</outSequence>
</target>
</proxy>
Run Code Online (Sandbox Code Playgroud)
我们无法通过此电话致电。请指导我如何从wso2调用python脚本