RPC 是日常开发中最常用的中间件,本文主要说明如何发布一个 RPC 服务。
前提条件
发布 SOFARPC 服务
要发布一个 RPC 服务,主要步骤说明如下:
在
app/endpoint/
下设计接口,示例如下:// com.alipay.APPNAME.facade.SampleService public interface SampleService{ String message(); }
提供一个接口的实现类,示例如下:
// com.alipay.APPNAME.service.SampleServiceImpl public class SampleServiceImpl implements SampleService{ @Override public String message(){ return "Hello, Service SOFABootRPC!"; } }
在接口所在模块中,通过
resources/META-INF
下的 xml 文件,将接口实现类配置为一个 Java bean。<bean id="sampleServiceBean" class="com.alipay.APPNAME.service.SampleServiceImpl"/>
在接口所在模块中,通过
resources/META-INF
下的 xml 文件,发布 RPC 服务。根据接口实现类的个数,可以分为下述 2 种:单接口单实现,示例如下:
<!-- 服务 --> <sofa:service ref="sampleServiceBean" interface="com.alipay.APPNAME.facade.SampleService"> <sofa:binding.bolt/> </sofa:service>
单接口多实现,示例如下:
<!-- 服务一 --> <sofa:service ref="sampleServiceBean1" interface="com.alipay.APPNAME.facade.SampleService" unique-id="service1"> <sofa:binding.bolt/> </sofa:service> <!-- 服务二 --> <sofa:service ref="sampleServiceBean2" interface="com.alipay.APPNAME.facade.SampleService" unique-id="service2"> <sofa:binding.bolt/> </sofa:service>
说明服务提供方定义服务
<sofa:service>
,并进行服务发布;服务消费方定义服务引用<sofa:reference>
,并进行服务引用。任何一个 SOFA 框架应用节点都可以同时发布服务和引用其它节点的服务。RPC 服务提供方通过服务
<sofa:service>
来定义,主要属性有interface
、unique-id
和ref
。interface
:该属性用于确定一个服务,属性值为:命名空间包名 + Java 接口名。unique-id
:如果同一个接口有两个不同的实现,而这两个不同的实现都需要发布成 SOFA 的 RPC 服务,则可以在发布服务的时候加上一个unique-id
属性来进行区分。ref
:该属性用于指定服务实现所对应的 Spring Bean,通过 Bean ID 和服务实现类进行关联。
本地运行
在工程的根目录下执行
mvn clean install
命令,在target
目录下生成一个可执行的Fat JAR
文件,例如:APPNAME-service-1.0-SNAPSHOT-executable.jar
。通过以下任一方法执行 JAR 文件,如果没有错误日志输出,则表示
sofaboot-rpc-server
工程启动成功。在命令行中执行
java -jar APPNAME-service-1.0-SNAPSHOT-executable.jar
命令。在本地 IDE 中直接运行
main
函数。
云端运行
SOFARPC 在本地只能通过直连方式进行体验。只有在云端发布成功后,通过 SOFAStack 控制台,才能进行服务管控和治理。具体云端发布步骤,请参考下述信息:
云端发布时,您必须在 application.properties
中配置以下属性:
run.mode=NORMAL
com.alipay.env=shared
com.alipay.instanceid=
com.antcloud.antvip.endpoint=
com.antcloud.mw.access=
com.antcloud.mw.secret=
运行模式和运行环境的值为默认固定值。参数的具体配置,请参见 引入 SOFA 中间件。
日志查看
查看本地工程 RPC 发布服务启动日志
logs/rpc/common-default.log
。如出现类似以下内容,说明 RPC 服务端成功启动:
2016-12-1715:16:44,466 INFO main - sofa rpc run.mode = DEV 2016-12-1715:16:49,479 INFO main - PID:42843 sofa rpc starting!
查看日志
logs/rpc/rpc-registry.log
,内容参考如下:2016-12-1715:17:07,764 INFO main RPC-REGISTRY -发布 RPC 服务:服务名[com.alipay.APPNAME.facade.SampleService:1.0@DEFAULT]
查看错误日志
logs/rpc/common-error.log
。如果没有任何错误日志输出且应用启动正常,说明成功发布了一个 RPC 服务。
关于日志的更多详情,请参见 日志说明。