apache synapse使用(2)
接着上面看官方的示例
消息中介示例
1,本地注册项,可重复使用的端点和序列
<!-- Local Registry entry definitions, reusable endpoints and sequences --> < definitions xmlns="http://ws.apache.org/ns/synapse" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://ws.apache.org/ns/synapse http://synapse.apache.org/ns/2010/04/configuration/synapse_config.xsd"> <!-- define a string resource entry to the local registry --> < localEntry key="version">0.1</ localEntry > <!-- define a reuseable endpoint definition --> < endpoint name="simple"> < address uri="http://localhost:9000/services/SimpleStockQuoteService"/> </ endpoint > <!-- define a reusable sequence --> < sequence name="stockquote"> <!-- log the message using the custom log level. illustrates custom properties for log --> < log level="custom"> < property name="Text" value="Sending quote request"/> < property name="version" expression="get-property('version')"/> < property name="direction" expression="get-property('direction')"/> </ log > <!-- send message to real endpoint referenced by key "simple" endpoint definition --> < send > < endpoint key="simple"/> </ send > </ sequence > < sequence name="main"> < in > < property name="direction" value="incoming"/> < sequence key="stockquote"/> </ in > < out > < send /> </ out > </ sequence > </ definitions > |
客户端执行
ant stockquote -Daddurl=http://localhost:9000/services/SimpleStockQuoteService -Dtrpurl=http://localhost:8280/
可以看到输出的结果
Standard :: Stock price = $80.1611906447455
过程是先进入main然后直接进入可重用序列stockqnote,最后将请求的信息发送到http://localhost:9000/services/SimpleStockQuoteService
使用http://localhost:9000/services/SimpleStockQuoteService?wsdl可以看到显示的结果
2,错误处理
< definitions xmlns="http://ws.apache.org/ns/synapse" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://ws.apache.org/ns/synapse http://synapse.apache.org/ns/2010/04/configuration/synapse_config.xsd"> <!-- the default fault handling sequence used by Synapse - named 'fault' --> < sequence name="fault"> < log level="custom"> < property name="text" value="An unexpected error occured"/> < property name="message" expression="get-property('ERROR_MESSAGE')"/> </ log > < drop /> </ sequence > < sequence name="sunErrorHandler"> < log level="custom"> < property name="text" value="An unexpected error occured for stock SUN"/> < property name="message" expression="get-property('ERROR_MESSAGE')"/> <!--<property name="detail" expression="get-property('ERROR_DETAIL')"/>--> </ log > < drop /> </ sequence > < sequence name="main"> < in > < switch xmlns:m0="http://services.samples" source="//m0:getQuote/m0:request/m0:symbol"> < case regex="IBM"> < send > < endpoint > < address uri="http://localhost:9000/services/SimpleStockQuoteService"/> </ endpoint > </ send > </ case > < case regex="MSFT"> < send > < endpoint key="bogus"/> </ send > </ case > < case regex="SUN"> < sequence key="sunSequence"/> </ case > </ switch > < drop /> </ in > < out > < send /> </ out > </ sequence > < sequence name="sunSequence" onError="sunErrorHandler"> < send > < endpoint key="sunPort"/> </ send > </ sequence > </ definitions > |
客户端执行
ant stockquote -Daddurl=http://localhost:9000/services/SimpleStockQuoteService -Dtrpurl=http://localhost:8280/ -Dsymbol=MSFT
执行查询MSFT的股价,因为没有对应的端点查找最接近的错误处理,服务端看到提示
INFO LogMediator text = An unexpected error occured, message = Couldn't find the endpoint with the key : bogus
执行查看sun的股价
ant stockquote -Daddurl=http://localhost:9000/services/SimpleStockQuoteService -Dtrpurl=http://localhost:8280/ -Dsymbol=SUN
最后打印出信息
INFO LogMediator text = An unexpected error occured for stock SUN, message = Couldn't find the endpoint with the key : sunPort
这个是在sunSeqence这个序列里执行的。
3,创建错误的SOAP信息并且变化消息的方向
<!-- Creating SOAP fault messages and changing the direction of a message --> < definitions xmlns="http://ws.apache.org/ns/synapse" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://ws.apache.org/ns/synapse http://synapse.apache.org/ns/2010/04/configuration/synapse_config.xsd"> < sequence name="myFaultHandler"> < makefault response="true"> < code xmlns:tns="http://www.w3.org/2003/05/soap-envelope" value="tns:Receiver"/> < reason expression="get-property('ERROR_MESSAGE')"/> </ makefault > < send /> </ sequence > < sequence name="main" onError="myFaultHandler"> < in > < switch xmlns:m0="http://services.samples" source="//m0:getQuote/m0:request/m0:symbol"> < case regex="MSFT"> < send > < endpoint > < address uri="http://bogus:9000/services/NonExistentStockQuoteService"/> </ endpoint > </ send > </ case > < case regex="SUN"> < send > < endpoint > < address uri="http://localhost:9009/services/NonExistentStockQuoteService"/> </ endpoint > </ send > </ case > </ switch > < drop /> </ in > < out > < send /> </ out > </ sequence > </ definitions > |
客户端调用
ant stockquote -Daddurl=http://localhost:9000/services/SimpleStockQuoteService -Dtrpurl=http://localhost:8280/ -Dsymbol=MSFT
返回
<soapenv:Fault xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"><faultcode>soapenv:Client</faultcode> <faultstring>java.net.UnknownHostException: bogus</faultstring><detail /></soapenv:Fault>
执行
ant stockquote -Daddurl=http://localhost:9000/services/SimpleStockQuoteService -Dtrpurl=http://localhost:8280/ -Dsymbol=SUN
返回
<soapenv:Fault xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"><faultcode>soapenv:Client</faultcode> <faultstring>java.net.ConnectException: Connection refused</faultstring><detail /></soapenv:Fault>
4,操纵SOAP协议头,修改传入或传出的消息
<!-- Manipulating SOAP headers, and filtering incoming and outgoing messages --> < definitions xmlns="http://ws.apache.org/ns/synapse" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://ws.apache.org/ns/synapse http://synapse.apache.org/ns/2010/04/configuration/synapse_config.xsd"> < sequence name="main"> < in > < header name="To" value="http://localhost:9000/services/SimpleStockQuoteService"/> </ in > < send /> </ sequence > </ definitions > |
修改协议头
客户端调用
ant stockquote -Dtrpurl=http://localhost:8280/
直接指向
http://localhost:9000/services/SimpleStockQuoteService |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
2010-11-04 目标设定与时间管理
2010-11-04 第四代时间管理