zoukankan      html  css  js  c++  java
  • RPC使用rabbitmq实现

    两天时间重写公司架构在本地实现测试学习

    双向连接客户端和服务端配置:

    1. 连接rabbitmq服务器
    2. 定义消息队列
    3. 配置发送请求的模板:交换机、消息队列。
    4. 配置监听处理:监听的队列、消息转换处理
    5. 配置处理类:处理类、发布的接口。

    RPC,全称为Remote Procedure Call,即远程过程调用,它是一个计算机通信协议。
    它允许像调用本地服务一样调用远程服务。它可以有不同的实现方式。如RMI(远程方法调用)、Hessian、Http invoker等。
    另外,RPC是与语言无关的。
    RPC实现
    1.通信模型:假设通信的为A机器与B机器,A与B之间有通信模型,在Java中一般基于BIO或NIO;。
    2.过程(服务)定位:使用给定的通信方式,与确定IP与端口及方法名称确定具体的过程或方法;
    3.远程代理对象:本地调用的方法(服务)其实是远程方法的本地代理,因此可能需要一个远程代理对象,对于Java而言,远程代理对象可以使用Java的动态对象实现,封装了调用远程方法调用;
    4.序列化,将对象名称、方法名称、参数等对象信息进行网络传输需要转换成二进制传输,这里可能需要不同的序列化技术方案。如:protobuf,Arvo等。
    Java实现RPC框架
    1、实现技术方案
       使用比较原始的方案实现RPC框架,采用Socket通信、动态代理与反射与Java原生的序列化。
    2、RPC框架架构
    RPC架构分为三部分:
    1)服务提供者,运行在服务器端,提供服务接口定义与服务实现类。
    2)服务中心,运行在服务器端,负责将本地服务发布成远程服务,管理远程服务,提供给服务消费者使用。
    3)服务消费者,运行在客户端,通过远程代理对象调用远程服务。
    rabbitmq实现重要点说明
    连接点配置
    <rabbit:connection-factory id="rabbitConnectionFactory"
            host="127.0.0.1" username="guest" password="guest" port="5672" />
    <!-- 服务发布 -->
         <bean id="请调用我" class="com.batman.ClientFactoryBean">
            <property name="queueName" value="queue.batman" />
            <property name="serviceInterface"
                value="com.batman.service.api.Service" />
    客户端发送请求模板配置
    <rabbit:template id="amqpTemplate" connection-factory="rabbitConnectionFactory"
            queue="queue.batman" exchange="exchange" reply-timeout="60000" />
    <!-- 配置监听容器,指定消息处理类,处理方法,还可以配置自动确认等-->
    <rabbit:listener-container requeue-rejected="false"
            concurrency="1" message-converter="messageConverter">
            <rabbit:listener queues="queue.batman"
                ref="resolver" method="clearinstance" />
        </rabbit:listener-container>
    定义消息队列
    <!-- 定义消息队列 -->
        <rabbit:queue queue-arguments="amqpQueueArguments" id="transQueue"
            name="queue.batman" />
    处理监听的处理类
    <rabbit:listener-container requeue-rejected="false"
            <rabbit:listener queues="transQueue" ref="MessageService" />
        </rabbit:listener-container>
    实际的处理类,并调用服务端发布的接口
    <bean id="nonFinanicalService" class="com.batman.Service">
            <property name="service" ref="messageServiceImpl" />
            <property name="serviceInterface"
                value="com.batman.service.api.Service" />
        </bean>
    <bean id="messageServiceImpl" class="com.batman.aipsweb.service.impl.MessageServiceImpl"> </bean>

    最后在客户端实现类上面Resource具体的发布名称

  • 相关阅读:
    asp.net访问网络路径方法(模拟用户登录)
    C# List使用District去重复数据
    post跨域请求
    Win7 IIS配置 applicationHost.config 错误:无法识别的特性“setProfileEnvironment” 解决方法
    常见 SQL语句使用 增删改查
    wangEditor编辑器中解析html图文信息问题
    jQuery制作table表格布局插件带有列左右拖动效果
    vue 三目运算
    jQuery遍历 filter()方法
    js 的filter()方法
  • 原文地址:https://www.cnblogs.com/mutong1228/p/9030022.html
Copyright © 2011-2022 走看看