广告位联系
返回顶部
分享到

新浪开源轻量级分布式RPC框架motan简单示例解析

java 来源:互联网 作者:秩名 发布时间:2022-03-05 23:31:52 人浏览
摘要

前言 好消息,支撑微博千亿调用的轻量级 RPC 框架 Motan在2016年5月份正式开源了,业界现在除了Dubbo 和 DubboX典型的分布式RPC服务治理型框架外,又多了一个优秀的分布式RPC了。心动了吗

前言

好消息,支撑微博千亿调用的轻量级 RPC 框架 Motan 在2016年5月份正式开源了,业界现在除了Dubbo 和 DubboX典型的分布式RPC服务治理型框架外,又多了一个优秀的分布式RPC了。心动了吗?使用过dubbo的话,so easy的上手,官方实例如下,动起来吧

我的demo地址,参考官方实例的简单demo,包含zookeeper注册中心,以及服务监控平台:https://coding.net/u/kailingchen/p/motan_Test/git

概述

Motan是一套高性能、易于使用的分布式远程服务调用(RPC)框架。

github项目地址:https://github.com/weibocom/motan

功能

  • 支持通过spring配置方式集成,无需额外编写代码即可为服务提供分布式调用能力。
  • 支持集成consul、zookeeper等配置服务组件,提供集群环境的服务发现及治理能力。
  • 支持动态自定义负载均衡、跨机房流量调整等高级服务调度能力。
  • 基于高并发、高负载场景进行优化,保障生产环境下RPC服务高可用。

简单调用示例

在pom中添加依赖

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

<dependency>

    <groupId>com.weibogroupId>

    <artifactId>motan-coreartifactId>

    <version>0.1.1version>

dependency>

<dependency>

    <groupId>com.weibogroupId>

    <artifactId>motan-transport-nettyartifactId>

    <version>0.1.1version>

dependency>  <dependency>

    <groupId>com.weibogroupId>

    <artifactId>motan-springsupportartifactId>

    <version>0.1.1version>

dependency>

<dependency>

    <groupId>org.springframeworkgroupId>

    <artifactId>spring-contextartifactId>

    <version>4.2.4.RELEASEversion>

<dependency>

为调用方和服务方创建公共接口

src/main/java/quickstart/FooService.java

1

2

package quickstart; public interface FooService { public String hello(String name);

}

编写业务接口逻辑、创建并启动RPC Server

src/main/java/quickstart/FooServiceImpl.java

1

2

3

package quickstart; public class FooServiceImpl implements FooService { public String hello(String name) { System.out.println(name + " invoked rpc service"); return "hello " + name;

    }

}

src/main/resources/motan_server.xml

1

2

<xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:motan="http://api.weibo.com/schema/motan" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd  http://api.weibo.com/schema/motan http://api.weibo.com/schema/motan.xsd">  <bean id="serviceImpl" class="quickstart.FooServiceImpl" />  <motan:service interface="quickstart.FooService" ref="serviceImpl" export="8002" />

src/main/java/quickstart/Server.java

1

2

3

package quickstart; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class Server { public static void main(String[] args) throws InterruptedException { ApplicationContext applicationContext = new ClassPathXmlApplicationContext("classpath:motan_server.xml"); System.out.println("server start...");

    }

}

执行Server类中的main函数将会启动Motan服务,并监听8002端口.

创建并执行RPC Client

src/main/resources/motan_client.xml

1

2

<xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:motan="http://api.weibo.com/schema/motan" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd  http://api.weibo.com/schema/motan http://api.weibo.com/schema/motan.xsd">  <motan:referer id="remoteService" interface="quickstart.FooService" directUrl="localhost:8002"/>

src/main/java/quickstart/Client.java

1

2

3

package quickstart; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class Client { public static void main(String[] args) throws InterruptedException { ApplicationContext ctx = new ClassPathXmlApplicationContext("classpath:motan_client.xml"); FooService service = (FooService) ctx.getBean("remoteService"); System.out.println(service.hello("motan"));

    }

}

执行Client类中的main函数将执行一次远程调用,并输出结果。

集群调用示例

在集群环境下使用Motan需要依赖外部服务发现组件,目前支持consul或zookeeper。

使用CONSUL作为注册中心

Consul安装与启动

安装(官方文档)

1

2

3

4

# 这里以linux为例

wget https://releases.hashicorp.com/consul/0.6.4/consul_0.6.4_linux_amd64.zip

unzip consul_0.6.4_linux_amd64.zip

sudo mv consul /bin

启动(官方文档)

1

2

测试环境启动:

consul agent -dev

ui后台 http://localhost:8500/ui

Motan-Consul配置

在server和client中添加motan-registry-consul依赖

1

2

3

4

5

<dependency>

    <groupId>com.weibogroupId>

    <artifactId>motan-registry-consulartifactId>

    <version>0.1.1version>

<dependency>

在server和client的配置文件中分别增加consul registry定义。

1

<motan:registry regProtocol="consul" name="my_consul" address="127.0.0.1:8500"/>

在Motan client及server配置改为通过registry服务发现。

client

1

<motan:referer id="remoteService" interface="quickstart.FooService" registry="my_consul"/>

server

1

<motan:service interface="quickstart.FooService" ref="serviceImpl" registry="my_consul" export="8002" />

server程序启动后,需要显式调用心跳开关,注册到consul。

1

MotanSwitcherUtil.setSwitcherValue(MotanConstants.REGISTRY_HEARTBEAT_SWITCHER, true)

进入ui后台查看服务是否正常提供调用

启动client,调用服务

使用ZOOKEEPER作为注册中心

ZooKeeper安装与启动

单机版安装与启动

1

2

3

4

5

6

7

8

wget http://mirrors.cnnic.cn/apache/zookeeper/zookeeper-3.4.8/zookeeper-3.4.8.tar.gz

tar zxvf zookeeper-3.4.8.tar.gz

 

cd zookeeper-3.4.8/conf/

cp zoo_sample.cfg zoo.cfg

 

cd ../

sh bin/zkServer.sh start

Motan-ZooKeeper配置

在server和client中添加motan-registry-zookeeper依赖

1

2

3

4

5

<dependency>

    <groupId>com.weibogroupId>

    <artifactId>motan-registry-zookeeperartifactId>

    <version>0.1.1version>

<dependency>

在server和client的配置文件中分别增加zookeeper registry定义。

zookeeper为单节点

1

<motan:registry regProtocol="zookeeper" name="my_zookeeper" address="127.0.0.1:2181"/>

zookeeper多节点集群

1

<motan:registry regProtocol="zookeeper" name="my_zookeeper" address="127.0.0.1:2181,127.0.0.1:2182,127.0.0.1:2183"/>

在Motan client及server配置改为通过registry服务发现。

client

1

<motan:referer id="remoteService" interface="quickstart.FooService" registry="my_zookeeper"/>

server

1

<motan:service interface="quickstart.FooService" ref="serviceImpl" registry="my_zookeeper" export="8002" />

server程序启动后,需要显式调用心跳开关,注册到zookeeper。

1

MotanSwitcherUtil.setSwitcherValue(MotanConstants.REGISTRY_HEARTBEAT_SWITCHER, true)

启动client,调用服务


版权声明 : 本文内容来源于互联网或用户自行发布贡献,该文观点仅代表原作者本人。本站仅提供信息存储空间服务和不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权, 违法违规的内容, 请发送邮件至2530232025#qq.cn(#换@)举报,一经查实,本站将立刻删除。

您可能感兴趣的文章 :

原文链接 : http://www.kailing.pub/article/index/arcid/118.html
相关文章
  • SpringBoot自定义错误处理逻辑介绍

    SpringBoot自定义错误处理逻辑介绍
    1. 自定义错误页面 将自定义错误页面放在 templates 的 error 文件夹下,SpringBoot 精确匹配错误信息,使用 4xx.html 或者 5xx.html 页面可以打印错误
  • Java实现手写一个线程池的代码

    Java实现手写一个线程池的代码
    线程池技术想必大家都不陌生把,相信在平时的工作中没有少用,而且这也是面试频率非常高的一个知识点,那么大家知道它的实现原理和
  • Java实现断点续传功能的代码

    Java实现断点续传功能的代码
    题目实现:网络资源的断点续传功能。 二、解题思路 获取要下载的资源网址 显示网络资源的大小 上次读取到的字节位置以及未读取的字节
  • 你可知HashMap为什么是线程不安全的
    HashMap 的线程不安全 HashMap 的线程不安全主要体现在下面两个方面 在 jdk 1.7 中,当并发执行扩容操作时会造成环形链和数据丢失的情况 在
  • ArrayList的动态扩容机制的介绍

    ArrayList的动态扩容机制的介绍
    对于 ArrayList 的动态扩容机制想必大家都听说过,之前的文章中也谈到过,不过由于时间久远,早已忘却。 所以利用这篇文章做做笔记,加
  • JVM基础之字节码的增强技术介绍

    JVM基础之字节码的增强技术介绍
    字节码增强技术 在上文中,着重介绍了字节码的结构,这为我们了解字节码增强技术的实现打下了基础。字节码增强技术就是一类对现有字
  • Java中的字节码增强技术

    Java中的字节码增强技术
    1.字节码增强技术 字节码增强技术就是一类对现有字节码进行修改或者动态生成全新字节码文件的技术。 参考地址 2.常见技术 技术分类 类
  • Redis BloomFilter布隆过滤器原理与实现

    Redis BloomFilter布隆过滤器原理与实现
    Bloom Filter 概念 布隆过滤器(英语:Bloom Filter)是1970年由一个叫布隆的小伙子提出的。它实际上是一个很长的二进制向量和一系列随机映射
  • Java C++算法题解leetcode801使序列递增的最小交换次

    Java C++算法题解leetcode801使序列递增的最小交换次
    题目要求 思路:状态机DP 实现一:状态机 Java 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 class Solution { public int minSwap(int[] nums1, int[] nums2) { int n
  • Mybatis结果集映射与生命周期介绍

    Mybatis结果集映射与生命周期介绍
    一、ResultMap结果集映射 1、设计思想 对简单的语句做到零配置,对于复杂一点的语句,只需要描述语句之间的关系就行了 2、resultMap的应用场
  • 本站所有内容来源于互联网或用户自行发布,本站仅提供信息存储空间服务,不拥有版权,不承担法律责任。如有侵犯您的权益,请您联系站长处理!
  • Copyright © 2017-2022 F11.CN All Rights Reserved. F11站长开发者网 版权所有 | 苏ICP备2022031554号-1 | 51LA统计