Coder Social home page Coder Social logo

lstarby / krpc Goto Github PK

View Code? Open in Web Editor NEW

This project forked from yangzhenkun/krpc

0.0 0.0 0.0 9.81 MB

My RPC FrameWork(自己写的RPC框架)

Home Page: https://blog.csdn.net/column/details/22012.html

License: MIT License

Java 99.91% Dockerfile 0.09%

krpc's Introduction

docker pull Build Status

Logo

如何使用

编译好的服务端环境 release

1.服务端

解压后server文件夹中就是服务端环境,如demo所示,server/service中有一个user文件,就是我们部署的user服务,下面有两个必须的文件夹conf(配置文件)

log4j.xml是该服务日志的标准的log4j配置文件,如果想修改日志路径

<!-- 输出日志到文件  每天一个文件 -->
  	<appender name="dailyRollingFile"
  		class="org.apache.log4j.DailyRollingFileAppender">
  		<param name="Threshold" value="info"></param>
  		<param name="ImmediateFlush" value="true"></param>
  		<param name="File" value="D:/opt/krpc/log/user/krpc.log"></param>
  		<param name="DatePattern" value="'.'yyyy-MM-dd'.log'"></param>
  		<layout class="org.apache.log4j.PatternLayout">
  			<param name="ConversionPattern" value="[%d{yyyy-MM-dd HH:mm:ss\} %-5p] [%t] {%c:%L}-%m%n"></param>
  		</layout>
  	</appender> 

修改值即可

server.xml文件为服务的配置文件

<configuration>

<!-- 配置注册中心 如果不配置,则不使用 -->
<zk sessionTimeOut="20000" connectionTimeOut="20000">
        <addr>127.0.0.1:2181,127.0.0.1:3333</addr>
</zk>
<!-- 连接相关参数 -->
	<property>
		<!-- 该服务监听的本机IP和tcp端口 -->
		<connection ip="127.0.0.1" port="17999" timeout="3000"/>
		<!-- 最大接受请求(字节,默认值是1024) -->
		<netty maxBuf="655350"/>
	</property>
	
	
	<!-- 所有能提供服务的接口 -->
	<services>
		<!-- name的值为接口名字,客户端通过代理工程生成接口时需要, impl值为具体实现类全路径  -->
		<service name="userService" impl="com.a123.service.user.impl.UserServiceImpl"/>
	</services>
	
	
	
	</configuration>

一个服务中所有对外的接口必须在services中配置,规则如上注释所示。

编写服务端代码会需要一个接口包和一个实现包,将源码生成jar包后,放在server/service/user/lib中,这里以user服务为例,你可以自己定义这个文件名的名字来标识这个服务。

启动 启动在server/bin里面,执行

    java -jar com.krpc.server-0.0.1.jar 服务名

命令,查看日志,如果看到 启动成功,监听端口*** 的日志,恭喜你,服务端启动成功。

docker 启动服务

https://github.com/yangzhenkun/krpc/tree/master/docker

krpc提供了服务端镜像,所以每个服务都可以在krpc提供的dockerfile模版中进行修改构建自己的服务镜像

2.客户端

需要引入KRPC客户端,由于项目还没有发布到maven**仓库,用户可以将client包发布到自己本地,或者直接将该com.krpc.client-0.0.1.jar包加入项目。

使用需要先调用KRPC.init("client配置文件")进行初始化 配置在client/client.xml中

    
    <!-- 配置注册中心-->
        <zk sessionTimeOut="2000" connectionTimeOut="2000">
            <addr>127.0.0.1:2181,127.0.0.1:3333</addr>
        </zk>
    
	<!-- 所连接的服务配置文件 name的值可以任意指定,只要在ProxyFactory.create的第二个参数值相同即可 -->
    <!--用户服务 -->
	<Service name="user" id="1" maxThreadCount="50">
		
        <Loadbalance>
			<!-- 请求超时时间(ms) -->
            <Server timeout="10000">
                <addr name="user1" host="127.0.0.1" port="17666" maxCurrentUser="50"/>
            </Server>
        </Loadbalance>
    </Service>

sercie的name的值必须

 
	UserService service = ProxyFactory.create(UserService.class, "user", "userService");

跟create中第二个参数一直。第三个参数为服务端实现的名字,需要跟服务端的配置文件一直。

3.要注意的事情

krpc.rar中的krpc相关包均为上面源码中生成

配置文件模板:https://github.com/yangzhenkun/krpc/tree/master/demo/config_file_template

这个RPC框架是我自己造轮子学习的,并没有真实在生产环境中使用,所以看到这个项目,希望大家可以交流学习技术,提交pr,issue,完善其性能及功能,争取让它可以用于生产环境

我个人博客中关于RPC及这个KRPC的源码原理解析会在这个专栏中写道 https://blog.csdn.net/column/details/22012.html

krpc's People

Contributors

yangzhenkun avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.