SOFA,即可扩展开放式金融服务架构,相较于其他服务架构,SOFA由于其spring上下文的模块隔离模式,使得SOFA架构的各个模块都拥有独立的spring配置,在应用拆分时,可以将模块的spring配置一同拆分出去,只需将本地服务改为远程服务即可。

一、安装插件

在idea的 Manage repositories 中添加自定义地址 : http://ide.alipay.net/plugin/list,添加完毕后搜索sofa,安装插件。

重启后即可看到SOFA工程创建按钮,如下:

sofarpc使用 sofa配置_xml文件

二、新建工程

sofarpc使用 sofa配置_xml文件_02


创建后的部分层级结构如下:

sofarpc使用 sofa配置_sofarpc使用_03

appname

|----app (应用目录)
 |----|----test --测试层
 |----|----web --视图展示层(配合SOFA MVC使用)
 |----|----|----home --公共模块
 |----|----biz --业务层
 |----|----|----shared --公共模块
 |----|----core
 |----|----common
 |----assembly (装配目录)
 |----conf (SOFA 相关配置存放目录)
 |----webroot (静态资源和 MVC 模块文件存放路径)
 |----pom.xml (总POM文件)

sofarpc使用 sofa配置_java_04


如上图,每个模块都是有独立的spring.xml文件的。

sofarpc使用 sofa配置_ide_05


根据不同的sofa创建方式,工程结构还有以下类型:

sofarpc使用 sofa配置_xml文件_06

文件生成后reimport一次pom.xml文件,然后添加启动入口,点击启动。

• IDEA 中:选择 File -> Open -> 选择工程根路径下的 pom.xml , 打开就可以了

• Eclipse 中:选择 File > Import > Existing Maven Projects,选择工程所在根目录,点击 “确定”。

有可能会报“Error running ‘xxxx’": Command line is too long…”的错,如果报错,就在.idea的workspace.xml文件中的PropertiesComponent中添加<property name="dynamic.classpath" value="true" />,如下图:

sofarpc使用 sofa配置_服务调用_07

系统间服务调用

服务提供方

在 common-service-facade 中创建接口,biz-service-impl 中的实现类使用 @SofaService 注解注册为一个sofa服务,@ZonePublish(zoneType = {"XX"})注解指定服务中心,@SofaService 的 bindings 属性: bindings = @SofaServiceBinding(bindingType = "jvm") ,指定sofa服务是jvm类型的服务,bindingType = “tr” 、bindingType = “bolt” 则是暴露给其他系统。

服务调用方

1、jvm间服务调用,使用 @SofaReference 注解即可。
2、不同系统间调用,则要在 common-service-integration及一级菜单下 的pom中引入jar包,创建client类,在client类中使用 @SofaReference(interfaceType = XX.class, binding = @SofaReferenceBinding(bindingType = "bolt")) 来注入sofa服务,或者使用spring配置文件


<sofa:reference id="sofa接口名称" interface="sofa接口路径"> <sofa:binding.tr> <!--接口暴露类型--> <sofa:global-attrs test-url="服务地址" timeout="超时时间"/> <sofa:vip url="服务地址"/> </sofa:binding.tr> </sofa:reference> 待续……