apache synapse使用(1)

一.Synapse介绍

Synapse 是一个简单的 XML 和 Web 服务管理与集成代理,可用于构成 SOA 和企业服务总线(ESB)的基础。Synapse是 Web 服务项目中一项成熟的 Apache 活动,并且是非常成功的 Apache Axis2 项目的一个分支。它提供了中介、管理、以及在各种不同的应用程序之间转换 XML 消息的能力

看看官方给出的架构图

二.官方示例

1,环境准备

  • A Java 2 SE - JDK or JRE of version 1.5.x or higher (JDK 1.6.0_21 recommended)
  • Apache Ant http://ant.apache.org

2,日志记录示例

在这个示例中,只是将执行过的调用执行日志记录功能

首先下载synapse: http://synapse.apache.org/download.html

解压,下文中提到的<synapse-home>就是解压后的根目录,进入到<synapse-home>/samples/axis2Server/src/SimpleStockQuoteService

运行ant

执行成功之后,到<synapse-home>/samples/axis2Server目录启动服务

axis2Server.bat

启动

启动Synapse

到目录<synapse-home>/repository/conf/sample目录下,看一下文件synapse_sample_0.xml

<!-- Introduction to Synapse -->
<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">
        <!-- log all attributes of messages passing through -->
        <log level="full"/>

        <!-- Send the message to implicit destination -->
        <send/>
    </sequence>

</definitions>

 定义记录所有通过的日志消息

然后到<synapse-home>/bin目录下,启动Synapse

执行 synapse.bat -sample 0

如上图所示表示启动成功

运行客户端

进行<synapse-home>/samples/axis2Client目录

运行 ant stockquote -Daddurl=http://localhost:9000/services/SimpleStockQuoteService -Dtrpurl=http://localhost:8280 -Dmode=quote -Dsymbol=IBM

查看发布的结果

http://localhost:9000/services/SimpleStockQuoteService

运行其它的示例程序如上。

使用代理服务发布

<!-- Introduction to proxy services -->
<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">

    <proxy name="StockQuoteProxy">
        <target>
            <endpoint>
                <address uri="http://localhost:9000/services/SimpleStockQuoteService"/>
            </endpoint>
            <outSequence>
                <send/>
            </outSequence>
        </target>
        <publishWSDL uri="file:repository/conf/sample/resources/proxy/sample_proxy_1.wsdl"/>
    </proxy>

</definitions>

 启动synapse服务

synapse.bat -sample 150

运行客户端

ant stockquote -Dtrpurl=http://localhost:8280/services/StockQuoteProxy -Dmode=quote -Dsymbol=IBM

控制台显示如下信息:

Standard :: Stock price = $165.32687331383468

3,改变日志级别

假如你在调试模式下运行,那么可以修改对应的配置文件的日志级别

可以在<synapse-home>/lib目录下log4j.properties,修改

"log4j.category.org.apache.synapse=INFO" as "log4j.category.org.apache.synapse=DEBUG"

就可以看到调试的信息

三.消息中介示例

1,简单介绍

在这个示例中

<!-- Introduction to Synapse -->
<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">
        <!-- log all attributes of messages passing through -->
        <log level="full"/>

        <!-- Send the message to implicit destination -->
        <send/>
    </sequence>

</definitions>

 使用示例有两种模式在客户端调用

1)智能客户端模式:ant stockquote -Daddurl=http://localhost:9000/services/SimpleStockQuoteService -Dtrpurl=http://localhost:8280/

2)使用synapse作为http代理

执行成功行服务端能看到

Thu Nov 03 16:47:22 CST 2011 samples.services.SimpleStockQuoteService :: Generat ing quote for : IBM

客户端能看到

 Standard :: Stock price = $80.1611906447455

2,执行代理客户端

<!-- Simple content based routing (CBR) of 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">
        <!-- filtering of messages with XPath and regex matches -->
        <filter source="get-property('To')" regex=".*/StockQuote.*">
            <then>
                <send>
                    <endpoint>
                        <address uri="http://localhost:9000/services/SimpleStockQuoteService"/>
                    </endpoint>
                </send>
                <drop/>
            </then>
        </filter>
        <send/>
    </sequence>

</definitions>

 执行结果同上

可以在9000端口上看到执行的结果

打开 http://localhost:9000/services/SimpleStockQuoteService?wsdl 可以看到接口的定义

3,使用CBR选择属性

配置文件如下:

<!-- CBR with the Switch-case mediator, using message properties -->
<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">
        <switch source="//m0:getQuote/m0:request/m0:symbol" xmlns:m0="http://services.samples">
            <case regex="IBM">
                <!-- the property mediator sets a local property on the *current* message -->
                <property name="symbol" value="Great stock - IBM"/>
            </case>
            <case regex="MSFT">
                <property name="symbol" value="Are you sure? - MSFT"/>
            </case>
            <default>
                <!-- it is possible to assign the result of an XPath expression as well -->
                <property name="symbol" expression="fn:concat('Normal Stock - ', //m0:getQuote/m0:request/m0:symbol)"/>
            </default>
        </switch>
        <log level="custom">
            <!-- the get-property() XPath extension function allows the lookup of local message properties
                        as well as properties from the Axis2 or Transport contexts (i.e. transport headers) -->
            <property name="symbol" expression="get-property('symbol')"/>
            <!-- the get-property() function supports the implicit message headers To/From/Action/FaultTo/ReplyTo -->
            <property name="epr" expression="get-property('To')"/>
        </log>
        <!-- Send the messages where they are destined to (i.e. the 'To' EPR of the message) -->
        <send/>
    </sequence>

</definitions>

 服务端执行synapse.bat -sample 2

客户端执行

ant stockquote -Daddurl=http://localhost:9000/services/SimpleStockQuoteService -Dtrpurl=http://localhost:8280/ -Dsymbol=IBM
或者执行
ant stockquote -Daddurl=http://localhost:9000/services/SimpleStockQuoteService -Dtrpurl=http://localhost:8280/ -Dsymbol=MSFT

后面的例子在下面的文章中依次列出

四.属性说明

1,definitions

Synapse配置的根元素,有默认的命名空间

http://ws.apache.org/ns/synapse

2,sequence

这个是所有消息中介的入口点,有一个非常重要的属性

name="main"

这个是所有程序的入口点,相当于java中的main函数

3,log

指定日志配置用的级别

4,in

标明执行请求要执行哪些中介

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏IMWeb前端团队

webpack原理与实战

本文作者:IMWeb 吴浩麟 原文出处:IMWeb社区 未经同意,禁止转载 image.png webpack是一个js打包工具,不一个完整的前端...

3869
来自专栏猿天地

Elastic-Job动态添加任务

背景 在使用Elastic-Job的过程中,有很多人遇到了这么一个问题,就是如何动态的去添加任务? 在官方的文档中也有对此作出回答,如下: 动态添加作业这个概念...

5107
来自专栏腾讯移动品质中心TMQ的专栏

JAVA代码覆盖率工具JaCoCo-实践篇

上周 JAVA代码覆盖率工具JaCoCo-原理篇 简单介绍了JaCoCo其生成覆盖率的基本原理,这周的实践篇的主要内容就是将原理应用到实践中,本篇内容全部都是具...

7549
来自专栏云计算教程系列

如何在Debian 9上安装最新的MySQL

MySQL是一个着名的开源数据库管理系统,用于存储和检索各种流行应用程序的数据。MySQL是LAMP堆栈中的M,是一组常用的开源软件,也包括Linux,Apac...

4802
来自专栏流柯技术学院

LR常见问题整理

  当一台主机上安装多个浏览器时,LoadRunner录制脚本经常遇到不能打开浏览器的情况,可以用下面的方法来解决。

3484
来自专栏数据和云

1024 程序员节:给 DBA 们的福音

通过 rpm 安装包,支持 yum 安装,这基本上将单实例的企业版数据库安装简化为一条命令:

1302
来自专栏非著名程序员

如何优化 Android Studio 启动、编译和运行速度?

?作为一名 Android 程序员,选择一个好的 IDE 工具可以使开发变得非常高效,很多程序员喜欢使用 Google 的 Android Studio来进行...

1916
来自专栏GAN&CV

Ubuntu16.04安装opencv2&&ImportError: No module named cv2.cv

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_25737169/article/d...

2893
来自专栏建站达人秀

如何部署 Tomcat 站点

Tomcat 是 Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由 Apache、Su...

2991
来自专栏用户1006619的专栏-1

linux下的进程控制

我们的一个系统在父进程退出后子进程偶尔出现不能正常的退出问题,这篇文章就是记录解决这个问题的过程。在unix系统上我们通过fork函数产生一个新的进程,这个新产...

1342

扫码关注云+社区