RPC 调用框架 springboot-MQRPC

Apache
Java 查看源码»
跨平台
2016-12-05
KL博客

一个简单便捷的基于springboot+RabbitMQ中间件实现的RPC调用框架

远程调用过程如下

首先:消费者和生产者spring容器初始化的时候,会根据配置的的api在RabbitMQ上建立相应的队列,消费者会监听相关队列

1)生产者(client)调用以本地调用方式调用服务;

2)client 接收到调用后通过Hessian将方法、参数等组装成能够进行网络传输的消息体;

3)client 通过代理类,执行invoke方法,统一将消息发送到MQ监听的服务端;

4)server 收到消息后通过Hessian进行解码;

5)server 根据解码结果调用本地的服务;

6)本地服务执行并将结果返回给server ;

7)server 将返回结果通过Hessian打包发送至消费方;

8)client 接收到消息,并进行解码;

9)生产者得到最终结果。

客户端配置:


    <!-- RabbitMQ连接池 -->
    <task:executor id="amqpConnectionTaskExecutor" pool-size="5"/>

    <!-- RabbitMQ连接器 -->
    <rabbit:connection-factory id="connectionFactory" executor="amqpConnectionTaskExecutor" host="127.0.0.1" port="5672" username="admin" password="admin"
                               virtual-host="/kl"/>

    <bean id="myService" class="com.kl.client.MQClientProxyFactoryBean">
        <property name="connectionFactory" ref="connectionFactory"/>
        <property name="serviceInterface" value="com.kl.api.Service"/>
    </bean>
服务端配置:



   <!-- RabbitMQ连接池 -->
    <task:executor id="amqpConnectionTaskExecutor" pool-size="5"/>

    <!-- RabbitMQ连接器 -->
    <rabbit:connection-factory id="connectionFactory" executor="amqpConnectionTaskExecutor" host="127.0.0.1" port="5672" username="admin" password="admin"
                               virtual-host="/kl"/>
    <bean id="ServiceImpl" class="com.kl.apiImpl.ServiceImpl"/>

    <bean id="MyServiceEndpoint" class="com.kl.server.MQServerEndpoint">
        <constructor-arg index="0" ref="ServiceImpl"/>
        <property name="connectionFactory" ref="connectionFactory"/>
    </bean>


测试代码及图例

    /**
     * 暴力测试
     * @param args
     */
    public static void main(String[] args) {
        GenericXmlApplicationContext context = new GenericXmlApplicationContext(
                "classpath:/applicationContext-client.xml");
        Service service = (Service) context.getBean("myService");
        new ClientTest().exec(service);
    }
    public void exec(Service service){
        ExecutorService executorService= Executors.newFixedThreadPool(30);
        for(int i=0;i<=30;i++){
            executorService.submit(new Task(service));
        }
    }
    private class Task implements Callable {
        private Service service;
        public Task(Service service){
            this.service=service;
        }
        @Override
        public Object call() throws Exception {
            for(int i=0;i<=100000;i++){
                System.out.println("servicEcho当前线程:"+Thread.currentThread().getName()+"| 线程任务数"+i+"| 输出:"+service.echo("Hello AMQP!"));
                System.out.println("serviceStudent当前线程:"+Thread.currentThread().getName()+"| 线程任务数"+i+"| 输出:"+service.getStudent(null).getName());

            }
            return null;
        }
    }



以下为测试图例
输入图片说明
输入图片说明
输入图片说明



的码云指数为
超过 的项目
加载中

评论(6)

小小刚
小小刚
厉害
KL博客
KL博客 软件作者
基于RabbitMQ,抗高并发,大流量。简便实用
554330833a
554330833a
这个好用吗?
开源中国RIO
开源中国RIO
down来看看
jackesy
jackesy
各种分布式架构太多了,不知道用哪个好?

暂无资讯

暂无问答

SpringBoot非官方教程 | 终章:文章汇总

springboot非官方教程,可能最接近于官方的一个教程,大多数案例都来自于官方文档,为了更好的理解,加入了个人的改造。 code下载:https://git.oschina.net/forezp/SpringBootLearning cod...

02/27 10:59
45
0
SpringBoot学习

· 入门 使用IntelliJ Idea新建SpringBoot项目 SpringBoot定时任务 SpringBoot返回json和xml SpringBoot使用validator校验 SpringBoot启动banner更改 SpringBoot使用LomBok · Web学习 Spri...

2018/08/30 17:32
91
0
Spring Boot教程(来源于微信公众号ImportNew)

ImportNew Spring Boot教程系列 非常适合刚接触的初学者,我也是通过这些文章在慢慢学习 分享一下Spring Boot的中文文档(插入的超链接用不了就很蓝瘦):https://qbgbook.gitbooks.io/sprin...

2018/06/19 11:52
26
0
最新SpringBoot2.0.3版本技术视频教程【免费学习】

超火爆的springboot微服务技术怎么学,看这里,springboot超详细的教程↓↓↓↓↓↓ https://ke.qq.com/course/179440?tuin=9b386640 springboot介绍 微服务介绍 springboot第一个例子 Spri...

2018/10/15 13:25
71
0
SpringBoot学习历程

新年新气象,更新了一下本人所有写的关于SpringBoot的文章目录,感谢大家长期以来的支持,在接下来的日子还会不定期的进行更新。 入门 使用IntelliJ Idea新建SpringBoot项目 SpringBoot启动b...

03/11 13:51
3
0
spingboot初体验

qq:853089986

2018/05/19 17:58
26
0
开发利器JRebel部署SpringBoot项目

不要以为年纪轻轻就跌倒了人生谷底,未来还有更大的下降空间等着你。 idea下载和安装JRebel 激活JRebel 访问https://my.jrebel.com/ 使用facebook或twitter登录 勾选 Build project automati...

2018/06/22 11:23
309
0
SpringBoot | 第零章:前言

缘起 前段时间公司领导叫编写一两课关于SpringBoot的基础知识培训课程,说实话,也是今年年初才开始接触了SpringBoot这个脚手架,使用了之后才发现打开了一个新世界。再之后也没有一些系统的...

2018/07/15 11:21
1K
7
spring-boot源码解析合集

本文转自“天河聊技术”微信公众号 springboot源码解析之SpringApplication初始化、启动 springboot源码解析之autoconfigure springboot源码解析autoconfigure之AopAutoConfiguration spring...

03/31 10:11
20
0
【SpringBoot专题】快速体验

前言 在Spring 4推出来之前,我们的编码是存在一些问题,比如:大量的xml配置存在项目中,配置相当繁琐;整合第三方框架非常麻烦;开发效率和部署效率不高等问题。正是因为这些问题,Spring开...

2018/08/28 16:26
9
0

没有更多内容

加载失败,请刷新页面

返回顶部
顶部