美文网首页
turbo-rpc.spring-注解

turbo-rpc.spring-注解

作者: 贾老师和他的朋友们 | 来源:发表于2019-11-21 00:01 被阅读0次
    Turborpc

    针对spring(boot)环境hessian远程调用,采用注解模式

    版本hessian-4.0.63;springBoot2.2.0

    1、项目结构
    因为客户端要使用服务端的接口,包括参数和返回值,所以用maven多module结构,把接口、参数和返回值放到一个module中,我们一般命名xx-rpc-common;package命名规则:
    com.bm.xx(项目).xx(模块).rpc.service;
    com.bm.xx(项目).xx(模块).rpc.dt
    对应服务
    com.bm.xx(项目).xx(模块).rpc.service.impl

    2、服务端
    2.1、实现接口

    @HessianService(path="xx/xx",description="xx")
    //path是服务对外暴露的路径,建议用模块名+类名,这样容易区分。
    public class HelloServiceImpl  implements IHelloService {
    

    2.2、暴露服务---已经用注解自动处理了
    写一个Bean,com.bm.xx(项目).rpc.exporter
    XX(模块)ServiceExporter

     @Resource
        @Qualifier(value="helloService")
        private IHelloService helloService;
    
        @Bean(name = "/helloService")---是对外暴露的url
        public HessianServiceExporter helloService() {
            HessianServiceExporter exporter = new HessianServiceExporter();
            exporter.setService(helloService);
            exporter.setServiceInterface(IHelloService.class);
            return exporter;
        }
    

    这种做法有点傻。
    通过注解自动暴露就显得比较优雅了。等下,昨天被一个自动扫描弄疯了。--终于ok了。

    3、客户端
    注册客户端,当然也可以每次实例化,建议写一个统一的clients。这个考虑和服务端一样处理,但是感觉意义不大。至少没有发现捷径,网上的方案有一个,但是不认同。
    com.bm.xx(项目).rpc.proxy
    XX(模块ServiceProxyBean

     @Bean
      public HessianProxyFactoryBean helloService() {
           @Value("turbo.rpc.url")
            //turbo是我们自己定义的属性;url后要有/
           String url ;
            HessianProxyFactoryBean factory = new HessianProxyFactoryBean();
            factory.setServiceUrl(url+"helloService");
            factory.setServiceInterface(IHelloService.class);
            return factory;
        }
    

    helloService就是我们要用的客户端端引用,然后调用接口的方法就可以。例如

     public String sayHello(String name){
            return helloService.sayHello(name);
        }
    

    相关文章

      网友评论

          本文标题:turbo-rpc.spring-注解

          本文链接:https://www.haomeiwen.com/subject/rggaictx.html