Venus Service Framework提供服务器端开发SDK以及客户端SDK。它们之间采用Venus自定义的私有协议。encoder、decoder采用多种序列化方式,客户端根据自己的语言选择一种序列化方式。
目前提供3种序列化方式:0:表示JSON, 1:表示BSON , 3:表示JAVA对象序列化(仅限于java语言)。
Venus为让开发人员只专注服务开发而努力,开发人员在设计接口的时候只需要按照java的接口设计原则进行设计,把接口、接口中使用的参数对象类、接口异常类封装成API包即可对外提供。
而Venus则承担协调沟通客户端服务器端的通讯框架。
接口定义接口:用来约束客户端、服务端的应用层协议,他申明了具体服务接口的调用方式,参数的数据类型,具体功能的声明、异常的描述等等信息,它有服务端开发工程师,服务使用方工程师共同制定的。
package com.meidusa.venus.hello.api;import com.meidusa.venus.annotations.Endpoint;import com.meidusa.venus.annotations.Param;import com.meidusa.venus.annotations.Service;import com.meidusa.venus.notify.InvocationListener;/** * Service framework的 HelloService 接口例子. * 支持3种调用方式: *
客户端开发1、引入venus相关依赖2、编写Spring的配置文件3、编写venus客户端配置文件:VenusClient-simple.xml4、编写Testcase进行junit测试
1、依赖管理
pom.xml
com.meidusa.service venus-client ${venus.version} 3.0.0
2、客户端spring配置文件
classpath:VenusClient-simple.xml
3、客户端的 venus.xml的配置
127.0.0.1:16800
4、testCase using Spring autowire
import org.springframework.beans.factory.annotation.Autowired;package com.meidusa.venus.hello.client;import java.util.concurrent.CountDownLatch;import org.junit.Test;import org.junit.runner.RunWith;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.test.context.ContextConfiguration;import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;import com.meidusa.venus.exception.CodedException;import com.meidusa.venus.hello.api.Hello;import com.meidusa.venus.hello.api.HelloNotFoundException;import com.meidusa.venus.hello.api.HelloService;import com.meidusa.venus.notify.InvocationListener;@RunWith(SpringJUnit4ClassRunner.class)@ContextConfiguration(locations="classpath:/applicationContext-helloworld-client.xml")public class TestHelloService { @Autowired private HelloService helloService; @Test public void saySync(){ System.out.println(helloService.getHello("jack")); } @Test public void testSyncWithException(){ try { helloService.sayHello("jack"); } catch (HelloNotFoundException e) { System.out.println("throw an user defined HelloNotFoundException"); } } @Test public void testAsync(){ helloService.sayAsyncHello("jack"); }}
服务端开发1、引入对venus的依赖2、实现HelloService接口3、Venus的服务端配置:VenusServices-simple.xml4、Spring的相关Bean的配置(注意:需要让spring容器默认采用 byName autowire 的功能: default-autowire="byName")
1、引入Venus相关的依赖
pom.xml
com.meidusa.service venus-backend ${venus.version} 3.0.0
2、实现HelloWorld接口
package com.meidusa.venus.hello.impl;import java.math.BigDecimal;import java.util.HashMap;import java.util.Map;import com.meidusa.venus.hello.api.Hello;import com.meidusa.venus.hello.api.HelloNotFoundException;import com.meidusa.venus.hello.api.HelloService;import com.meidusa.venus.notify.InvocationListener;public class DefaultHelloService implements HelloService { private String greeting; public String getGreeting() { return greeting; } public void setGreeting(String greeting) { this.greeting = greeting; } public Hello getHello(String name) { Hello hello = new Hello(); hello.setName(name); hello.setGreeting(greeting); Mapmap = new HashMap (); hello.setMap(map); map.put("1", 1); map.put("2", new Long(2)); map.put("3", new Integer(3)); hello.setBigDecimal(new BigDecimal("1.341241233412")); return hello; } public void sayHello(String name) throws HelloNotFoundException { throw new HelloNotFoundException(name +" not found"); } @Override public void sayAsyncHello(String name) { System.out.println("method sayAsyncHello invoked"); } public void sayHello(String name, InvocationListener invocationListener) { Hello hello = new Hello(); hello.setName(name); hello.setGreeting(greeting); Map map = new HashMap (); hello.setMap(map); map.put("1", 1); map.put("2", new Long(2)); map.put("3", new Integer(3)); if(invocationListener != null){ invocationListener.callback(hello); } }}
3、VenusService-simple.xml的配置
hello venus hello service
4、Spring相关的venus 配置
classpath:VenusServices-simple.xml
服务端的启动控制台展示1、显示了多少个Service暴露出来2、显示了每个Service有哪些Endpoint暴露出来3、服务端的监听端口
2011-11-28 20:52:01,242 INFO xml.XmlFileServiceManager - Add Endpoint: HelloService.sayHello2011-11-28 20:52:01,242 INFO xml.XmlFileServiceManager - Add Endpoint: HelloService.sayHelloWithCallbak2011-11-28 20:52:01,242 INFO xml.XmlFileServiceManager - Add Endpoint: HelloService.sayAsyncHello2011-11-28 20:52:01,242 INFO xml.XmlFileServiceManager - Add Endpoint: HelloService.getHello2011-11-28 20:52:01,242 INFO xml.XmlFileServiceManager - Add Endpoint: ParameterizedService.arrayLong2011-11-28 20:52:01,242 INFO xml.XmlFileServiceManager - Add Endpoint: ParameterizedService.arraylong2011-11-28 20:52:01,258 INFO net.ServerableConnectionManager - Server listening on 0.0.0.0/0.0.0.0:16800.
PropertyPlaceholder:用于替换venus的配置文件中包含 ${}变量的东西
file:${project.home:.}/application.properties
helloworld源代码地址:
svn 地址:svn://svn.hexnova.com/venus/venus-helloworld/trunk
转载自:http://wiki.hexnova.com/pages/viewpage.action?pageId=2883620