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

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

  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具体的发布名称

RPC使用rabbitmq实现的更多相关文章

  1. RPC和RabbitMQ

    在单台机器或者单个进程中,如果要调用某个函数,只需要通过函数指针,传入相关参数,即可调用成功并获得结果.但如果是在分布式系统中,某个进程想要调用远程机器上的其它进程提供的方法(服务),就需要采用RPC ...

  2. RabbitMQ系列教程之六:远程过程调用(RPC)

    远程过程调用(Remote Proceddure call[RPC])(本实例都是使用的Net的客户端,使用C#编写)  在第二个教程中,我们学习了如何使用工作队列在多个工作实例之间分配耗时的任务.  ...

  3. 《RabbitMQ Tutorial》译文 第 6 章 远程过程调用(RPC)

    原文来自 RabbitMQ 英文官网的教程(6.Remote procedure call - RPC),其示例代码采用了 .NET C# 语言. In the second tutorial we ...

  4. RabbitMQ学习笔记(六) RPC

    什么RPC? 这一段是从度娘摘抄的. RPC(Remote Procedure Call Protocol)——远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的 ...

  5. 【c#】RabbitMQ学习文档(六)RPC(远程调用)

    远程过程调用(Remote Proceddure call[RPC]) (本实例都是使用的Net的客户端,使用C#编写) 在第二个教程中,我们学习了如何使用工作队列在多个工作实例之间分配耗时的任务. ...

  6. rabbitmq (五)RPC

    Remote Procedure Call or RPC(远程函数调用) 当我们需要在远程计算机上运行一个函数,并且等待结果的时候,我们用到RPC 在rabbitmq客户端使用call函数,发送RPC ...

  7. RabbitMQ系列教程之六:远程过程调用(RPC)(转载)

    RabbitMQ系列教程之六:远程过程调用(RPC) 远程过程调用(Remote Proceddure call[RPC]) (本实例都是使用的Net的客户端,使用C#编写) 在第二个教程中,我们学习 ...

  8. RabbitMQ (十) 远程过程调用(RPC)

    在远程计算机上运行一个函数并等待结果,我们通常叫这种模式为远程过程调用或者RPC. 通过 RabbitMQ 进行 RPC 很容易,客户端发送请求消息,服务器回复响应消息.为了接收响应,我们需要发送带有 ...

  9. RabbitMQ 官方NET教程(六)【RPC】

    在第二个教程中,我们学习了如何使用Work Queues在多个工作者之间分配耗时的任务. 但是如果我们需要在远程计算机上运行功能并等待结果怎么办? 那是一个不同的模式. 此模式通常称为远程过程调用或R ...

随机推荐

  1. (转发)一个通用的C++ 消息总线框架

    注:转自https://www.cnblogs.com/qicosmos/archive/2013/04/28/3048919.html 应用开发过程中经常会处理对象间通信的问题,一般都是对象或接口的 ...

  2. 悟空模式-java-建造者模式

    [此是锻炼神冰铁,磨琢成工光皎洁.老君自己动钤锤,荧惑亲身添炭屑.五方五帝用心机,六丁六甲费周折.造成九齿玉垂牙,铸就双环金坠叶.身妆六曜排五星,体按四时依八节.短长上下定乾坤,左右阴阳分日月.六爻神 ...

  3. php+xml有什么用

    很多招聘网上找php程序员的时候都说要懂xml,这个xml+php在web网站开发方面到底有什么应用呢,希望有知道的朋友能给我具体说说,谢谢了! 我说的是在网站中的实际应用有哪些,不是网上抄的xml的 ...

  4. python-状态模式

    源码地址:https://github.com/weilanhanf/PythonDesignPatterns 说明: 在软件开发过程中,各种应用程序可能会根据不同的情况做出不同的处理.最直接的方案就 ...

  5. 本地服务器搭建服务:mysql

    话不多少,mysql的优劣不再此讨论. 1.官网地址:https://dev.mysql.com/downloads/mysql/ 下载页面直接  No thanks,just start my do ...

  6. CentOS7安装mongodb

    1.下载mongodb的*.tar.gz安装包 2.移到centos7中并解压 tar -xzvf mongodb.tar.gz 3.配置环境变量 vim /etc/profile 添加如下内容: # ...

  7. 从零开始学习html(十一)CSS盒模型——下

    六.盒模型--边框(一) <!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type& ...

  8. NUnit单元测试示例

    单元测试的用法 1.下载NUnit软件 安装后打开界面如图: 2.新建测试项目 添加类库项目并在NuGet管理包中添加NUnit 这里添加NuGet的NUnit包要注意保持版本和之前下载的NUnit软 ...

  9. php 去除所有空格 包括中文空格圆角空格

    有的中文的半角,圆角空格或者段落符显示为空白的.可以用正则来处理 preg_replace("/(\s|\&nbsp\;| |\xc2\xa0)/","" ...

  10. 关于DAL层使用静态方法,并在WEB层直接调用的问题

    同样的疑惑,记录一下吧: http://bbs.csdn.net/topics/360204198 DAL静不静态看connection等关键资源是否静态 比如下面的代码,就算静态也没事 public ...