SOFA,即可扩展开放式金融服务架构,相较于其他服务架构,SOFA由于其spring上下文的模块隔离模式,使得SOFA架构的各个模块都拥有独立的spring配置,在应用拆分时,可以将模块的spring配置一同拆分出去,只需将本地服务改为远程服务即可。
一、安装插件
在idea的 Manage repositories 中添加自定义地址 : http://ide.alipay.net/plugin/list,添加完毕后搜索sofa,安装插件。
重启后即可看到SOFA工程创建按钮,如下:
二、新建工程
创建后的部分层级结构如下:
appname
|----app (应用目录)
|----|----test --测试层
|----|----web --视图展示层(配合SOFA MVC使用)
|----|----|----home --公共模块
|----|----biz --业务层
|----|----|----shared --公共模块
|----|----core
|----|----common
|----assembly (装配目录)
|----conf (SOFA 相关配置存放目录)
|----webroot (静态资源和 MVC 模块文件存放路径)
|----pom.xml (总POM文件)
如上图,每个模块都是有独立的spring.xml文件的。
根据不同的sofa创建方式,工程结构还有以下类型:
文件生成后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" />
,如下图:
系统间服务调用
服务提供方
在 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>
待续……