搭建新浪RPC框架motan Demo

搭建新浪RPC框架motan Demomotan 是新浪微博开源的 RPC 框架 github 官网是 https github com weibocom motan 今天就先搭建一个 Helloworldde 本 demo 基于 motan0 2 1 版本首先先去 github 下载源代码 motan manager 报错请忽略 eclipse 的 webModule 不兼容 选中 motan 下的 pom xml

今天就先搭建一个Hello world demo,本demo基于motan 0.2.1版本

首先先去github下载源代码(motan-manager报错请忽略,eclipse的web Module不兼容):

搭建新浪RPC框架motan Demo

选中motan下的pom.xml,进行编译打包:

搭建新浪RPC框架motan Demo

下载源码编译打包的目的有三个:

1)下载源代码可以方便源代码阅读学习

2)下载到motan.xsd,因为motan与spring进行了继承,有了自己的schema,eclipse会不识别,会导致xml报错,跟dubbo的配置文件报错一个道理

3)打包获取到motan-manager的页面管理端的war包

3)在motan-manager的target文件下找到打好的war包:

搭建新浪RPC框架motan Demo

单独找一个tomcat,将其放入webapp文件下

搭建新浪RPC框架motan Demo

然后进入bin文件下,启动tomcat

搭建新浪RPC框架motan Demo

打开浏览器http://localhost:8080/motan-manager-0.2.2-SNAPSHOT:

搭建新浪RPC框架motan Demo


到此为止motan的管理平台就搭建好了,下面就搭建基于zookeeper为注册中心的RPC demo

1)首先先启动一个简单的zookeeper实例,在windows下简单的启动一个,写个demo,不需要集群

搭建新浪RPC框架motan Demo


打开eclipse,搭建两个简单的maven项目:

搭建新浪RPC框架motan Demo

motan-provider为服务提供端,motan-client服务调用端。两个项目的依赖基本上一样的:

 
   
   
     UTF-8 
    
   
     0.2.1 
    
   
   
    
    
      com.weibo 
     
    
      motan-core 
     
    
      ${motan.version} 
     
    
    
    
      com.weibo 
     
    
      motan-transport-netty 
     
    
      ${motan.version} 
     
    
    
    
      com.weibo 
     
    
      motan-registry-zookeeper 
     
    
      ${motan.version} 
     
    
    
    
      com.weibo 
     
    
      motan-springsupport 
     
    
      ${motan.version} 
     
    
    
    
      org.springframework 
     
    
      spring-context 
     
    
      4.2.4.RELEASE 
     
    
    
    
      org.slf4j 
     
    
      slf4j-api 
     
    
      1.5.8 
     
    
    
    
      org.slf4j 
     
    
      slf4j-log4j12 
     
    
      1.5.8 
     
    
    
    
      log4j 
     
    
      log4j 
     
    
      1.2.14 
     
    
  

服务提供端motan-provider的编写

1)我们写一个简单的接口HelloService:

package com.bazinga.study.motan.rpc.service; public interface HelloService { public String hello(String str); } 

HelloSerivce简单的实现类HelloServiceImpl:

package com.bazinga.study.motan.rpc.service; public class HelloServiceImpl implements HelloService { public String hello(String str) { return "hello " + str; } } 

然后在src/main/resources下配置spring-motan-provider.xml

 
   
   
    
    
    
    
    
    
    
    
    
    
  

注意此时你的IDE可能会报错,不识别

这些标签,解决方案:

Window–>Preferences—>XML:

搭建新浪RPC框架motan Demo


选中我们刚才冲源码包中获取到的motan.xsd,然后key type选择Schema location 最最关键的就是key值了:http://api.weibo.com/schema/motan.xsd

这个值要与你命名空间中的值一样:

搭建新浪RPC框架motan Demo


重新打开spring-motan-provider.xml文件就不报错了~

好了,我们继续,编写provider的启动类ProviderStarter:

package com.bazinga.study.motan.rpc.quickstart; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import com.weibo.api.motan.common.MotanConstants; import com.weibo.api.motan.util.MotanSwitcherUtil; public class ProviderStarter { public static void main(String[] args) { ApplicationContext applicationContext = new ClassPathXmlApplicationContext("classpath:spring-motan-provider.xml"); MotanSwitcherUtil.setSwitcherValue(MotanConstants.REGISTRY_HEARTBEAT_SWITCHER, true); System.out.println("server start..."); } } 

启动该类:

搭建新浪RPC框架motan Demo

此时再打开motan-manager的管理页面:

搭建新浪RPC框架motan Demo


可以查询到我们刚才注册好的服务,并且可以看到Server的服务者的个数是1个,我们开始编写motan-client的编写:

1)先把motan-provider端的HelloSerivce接口复制到motan-client,package的目录也要一样,因为接口的绝对路径被认为服务的唯一标识

2)在motan-client的src/main/resources文件夹下新建文件spring-motan-client.xml

 
   
   
    
    
    
    
    
    
  

3)编写启动类:

package com.bazinga.study.motan.rpc.quickstart; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import com.bazinga.study.motan.rpc.service.HelloService; public class ClientStart { public static void main(String[] args) { ApplicationContext ctx = new ClassPathXmlApplicationContext("classpath:spring-motan-client.xml"); HelloService service = (HelloService) ctx.getBean("remoteService"); for(int i = 0;i< 50;i++){ System.out.println(service.hello("motan " + i)); } } } 

4)log4j.properties

log4j.rootLogger=warn log4j.logger.info=info,infofile log4j.logger.warn=warn,warnfile log4j.logger.error=error,errorfile log4j.logger.profile=info,profile log4j.logger.trace=trace,tracefile log4j.logger.accessLog=debug,accessfile log4j.logger.serviceStatsLog=info,serviceStatsLog log4j.appender.tracefile=org.apache.log4j.DailyRollingFileAppender log4j.appender.tracefile.file=./logs/client/trace.log log4j.appender.tracefile.DatePattern='.'yyyyMMdd log4j.appender.tracefile.layout=org.apache.log4j.PatternLayout log4j.appender.tracefile.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss} [%p] %m%n log4j.appender.accessfile=org.apache.log4j.DailyRollingFileAppender log4j.appender.accessfile.file=./logs/client/access.log log4j.appender.accessfile.DatePattern='.'yyyyMMdd log4j.appender.accessfile.layout=org.apache.log4j.PatternLayout log4j.appender.accessfile.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss} [%p] %m%n log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=%p %d{yy/MM/dd HH:mm:ss} %-50.50c(%L) - %m%n log4j.appender.infofile=org.apache.log4j.DailyRollingFileAppender log4j.appender.infofile.file=./logs/client/info.log log4j.appender.infofile.DatePattern='.'yyyyMMdd-HH log4j.appender.infofile.layout=org.apache.log4j.PatternLayout log4j.appender.infofile.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss} [%p] %m%n log4j.appender.warnfile=org.apache.log4j.DailyRollingFileAppender log4j.appender.warnfile.file=./logs/client/warn.log log4j.appender.warnfile.DatePattern='.'yyyyMMdd log4j.appender.warnfile.layout=org.apache.log4j.PatternLayout log4j.appender.warnfile.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss} [%p] %m%n log4j.appender.errorfile=org.apache.log4j.DailyRollingFileAppender log4j.appender.errorfile.file=./logs/client/error.log log4j.appender.errorfile.DatePattern='.'yyyyMMdd log4j.appender.errorfile.layout=org.apache.log4j.PatternLayout log4j.appender.errorfile.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss} [%p] %m%n #profile log4j.appender.profile=org.apache.log4j.DailyRollingFileAppender log4j.appender.profile.file=./logs/client/profile.log log4j.appender.profile.DatePattern='.'yyyyMMdd-HH log4j.appender.profile.layout=org.apache.log4j.PatternLayout log4j.appender.profile.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss} %m%n #serviceStats log4j.appender.serviceStatsLog=org.apache.log4j.DailyRollingFileAppender log4j.appender.serviceStatsLog.file=./logs/client/serverserviceStatsLog.log log4j.appender.serviceStatsLog.DatePattern='.'yyyyMMdd log4j.appender.serviceStatsLog.layout=org.apache.log4j.PatternLayout log4j.appender.serviceStatsLog.layout.ConversionPattern=%-d{HH:mm:ss} %m%n 

启动ClientStart.java

搭建新浪RPC框架motan Demo


现在已经调通了,我们再看看motan-manager:

搭建新浪RPC框架motan Demo


好了,到此为此,一个简单的motan demo已经搭建好了~

完整的项目截图:

搭建新浪RPC框架motan Demo



版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/215384.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月18日 下午2:03
下一篇 2026年3月18日 下午2:03


相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号