8000 Home · commonrpc/commonrpc Wiki · GitHub
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content
commonrpc edited this page Mar 11, 2015 · 4 revisions

commonrpc 解决行业痛点问题

当一个电商系统包括以下三个功能:存库,购物车,结算页三个功能,当购其中一个功能扛不住每分钟千万级或者亿级流量,这样问题就来了,一个功能不使用,所有功能不能使用,系统挂了。

解决办法: 把电商系统按照功能服务化,存储,购物车,结算页三个功能作为三个系统,每个系统独立提供服务,但是有依赖关系。这样一个功能挂了,其它系统可以降级保证大体上可以使用。其中依赖关系:结算页依赖购物车,购物车依赖库存。这样库 存系统是服务端提供服务,购物车是客户端,调用存储的服务,又是服务端为结算页提供服务,结算页就是客户端,调用购物车的服务。

commonrpc 编程思路

开发人员在开发项目,都会有接口和实现类,commonrpc 需要大家把这两个按照两个模块,实现类模块需要接口模块jar包,实现对应的方法。接口模块jar 包可以提供给其它系统,调用服务端的客户端系统。这样服务端系统和客户端系统共有同样接口模块jar 文件。

-------------------------------------tcp 用例代码------------------------------------------------------------------

1:服务端spring 配置文件

  <commonrpc:registry id="rpcRegistry" port="10009" timeout="500" token="1122" procotolType="1" codecType="4" /> 
  <!--filterRef 可以不配置  -->   
 <commonrpc:service id="IDemoService"  interfacename="test.cross.plateform.rocketrpc.demo.service.IDemoService" ref="demoService" filterRef="demoRpcFilter" ></commonrpc:service>
 <bean id="demoService" class="test.cross.plateform.rocketrpc.demo.service.impl.DemoServiceImpl"></bean>
 <!--可以不配置,看业务情况  -->
<bean id="demoRpcFilter" class="test.cross.plateform.rocketrpc.demo.service.impl.DemoRpcFilter"></bean>

2:服务端业务接口代码(接口单独是一个工程,服务化最重要的一个步骤,接口单独一个工程,提供给服务端实现接口,又给客户端调用)

public interface IDemoService {

public String sayDemo(String params);

public String getParam(String params);

}

3:服务端业务实现类代码

public class DemoServiceImpl implements IDemoService {

private static final Log LOGGER = LogFactory
		.getLog(DemoServiceImpl.class);

@Override
public String sayDemo(String params) {
	// TODO Auto-generated method stub
	//LOGGER.info("sayDemo params:"+params);
	return "from server:"+params;
}

@Override
public String getParam(String params) {
	// TODO Auto-generated method stub
	//LOGGER.info("getParam params:"+params);
	return "from server:"+params;
}

}

4:服务端业务测试代码

public class DeomoServiceTest {

public static void main(String[] args) {
	new ClassPathXmlApplicationContext("commonRpcServer.xml");
}

}

5:客户端 spring配置文件

 <!--address  可以多个,这样服务端可以水平扩展  -->
<commonrpc:reference id="demoServiceClient" interfacename="test.cross.plateform.rocketrpc.demo.service.IDemoService" procotolType="1"   codecType="4"timeout="500" address="127.0.0.1:10009,127.0.0.1:10008" token="1122" ></commonrpc:reference>

6:客户端测试实现代码(客户端引用服务端提供接口jar包)

public class DeomoClientTest { public static void main(String[] args) {

	ClassPathXmlApplicationContext context =new ClassPathXmlApplicationContext("CommonRpcClient.xml");
	IDemoService demoService=(IDemoService) context.getBean("demoServiceClient");
	long time1=System.currentTimeMillis();
	for(int i=0;i<1;i++){
		String result=demoService.sayDemo("okok");
		System.out.println(result);
	}
	
	long end1=System.currentTimeMillis();
	System.out.println("完成时间1:"+(end1-time1));
}

}

7: 开源中国 maven 库,需要引入jar ,maven 形式

  <groupId>com.rpc</groupId>
  <artifactId>commonrpc-tcp</artifactId>
  <version>1.0</version>

----------------------------------http 代码-----------------------------------------------------------------------

1:服务端spring 配置文件

  <commonrpc:registry id="rpcRegistry" port="10009" timeout="500"/>
  <!-- httpType 为:POST,GET,PUT,HEAD,DELETE 大写--->
  <!-- returnType 为:json,xml,html 小写--->
  <!-- filterRef  使用方法同上--->
  <commonrpc:service id="IDemoService"  projectname="Demo" ref="demoService" httpType="POST" returnType="html"/>  
  <bean id="demoService" class="test.cross.plateform.service.impl.DemoServiceImpl"/>

2: 服务端业务代码:

public class DemoServiceImpl implements IDemoService {

/* (non-Javadoc)
 * @see test.cross.plateform.service.IDemoService#sayDemo(java.lang.String, java.lang.String)
 */
@Override
public void sayDemo(String name, String age) {
	// TODO Auto-generated method stub
	System.out.println(name+"--------"+age);
}

/* (non-Javadoc)
 * @see test.cross.plateform.service.IDemoService#sayDemoByParamsMap(java.util.Map)
 */
@Override
public void sayDemoByParamsMap(Map<String, Object> params) {
	// TODO Auto-generated method stub
	System.out.println(params);
}

@Override
public void sayDemoByParamsCollections(List<Object> params) {
	// TODO Auto-generated method stub
	System.out.println(params);
}

@Override
public void sayDemoByParamsArray(Object[] params) {
	// TODO Auto-generated method stub
	System.out.println(params);
}
   
   @Override
public void sayDemoByParamsCollections(List<Object> params) {
	// TODO Auto-generated method stub
	System.out.println(params);
}

}

3:开源中国 maven 库,需要引入jar ,maven 形式

<groupId>com.rpc</groupId>
<artifactId>commonrpc-http</artifactId>
<version>1.0</version>

4: URL 访问以及参数

  1. http://127.0.0.1:10009/Demo/demoServiceImpl/sayDemo 参数:{name:"11",age:"223"}

  2. http://127.0.0.1:10009/Demo/demoServiceImpl/sayDemoByParamsMap 参数:{name:"11",age:"223"}

  3. http://127.0.0.1:10009/Demo/demoServiceImpl/sayDemoByParamsCollections 参数:{name:"11",age:"223"}

  4. http://127.0.0.1:10009/Demo/demoServiceImpl/sayDemoByParamsArray 参数:{name:"11",age:"223"}

  5. http://127.0.0.1:10009/Demo/demoServiceImpl/sayDemoBean 参数:{name:"11",age:"223"}

Clone this wiki locally
0