springboot结合服务化框架motan

springboot极大地提升了java应用的开发体验,感觉特别酸爽。服务化框架可谓是大型系统必用,比较古典的是阿里开源的dubbo,可惜很早就不更新了,研究其代码来看,感觉不够轻量,幸运的是去年微博开源了自己的轻量级服务化框架motan。本文阐述下如何在springboot下用motan。

服务方:

工程结构代码 收藏代码

whatsmars-motan
  |-src
    |-main
      |-java
        |-com.weibo.motan.demo.service
      |-impl
        MotanDemoServiceImpl.java
      APP.java
      MotanDemoService.java
      |-resource
        |-spring
      motan_demo_server.xml
    log4j.properties
  pom.xml

依赖:
Xml代码 收藏代码

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">  

    <modelVersion>4.0.0</modelVersion>  

    <artifactId>whatsmars-motan</artifactId>  

    <properties>
        <!-- The main class to start by executing java -jar -->
        <start-class>com.weibo.motan.demo.service.App</start-class>
        <motan.version>0.1.1</motan.version>
    </properties>  

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.2.RELEASE</version>
    </parent>  

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <!--weibo motan-->
        <dependency>
            <groupId>com.weibo</groupId>
            <artifactId>motan-core</artifactId>
            <version>${motan.version}</version>
        </dependency>
        <dependency>
            <groupId>com.weibo</groupId>
            <artifactId>motan-transport-netty</artifactId>
            <version>${motan.version}</version>
        </dependency>
        <dependency>
            <groupId>com.weibo</groupId>
            <artifactId>motan-registry-consul</artifactId>
            <version>${motan.version}</version>
        </dependency>
        <dependency>
            <groupId>com.weibo</groupId>
            <artifactId>motan-registry-zookeeper</artifactId>
            <version>${motan.version}</version>
        </dependency>  

        <!-- dependencies blow were only needed for spring-based features -->
        <dependency>
            <groupId>com.weibo</groupId>
            <artifactId>motan-springsupport</artifactId>
            <version>${motan.version}</version>
        </dependency>
    </dependencies>  

    <build>
        <finalName>${project.artifactId}</finalName>
        <resources>
            <resource>
                <directory>src/main/resources</directory>
                <filtering>true</filtering>
            </resource>
        </resources>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <dependencies>
                    <dependency>
                        <groupId>org.springframework</groupId>
                        <artifactId>springloaded</artifactId>
                        <version>1.2.6.RELEASE</version>
                    </dependency>
                </dependencies>
            </plugin>
        </plugins>
    </build>
</project>

demo_motan_server.xml
Xml代码 收藏代码

<?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="motanDemoServiceImpl" class="com.weibo.motan.demo.service.impl.MotanDemoServiceImpl"/> -->  

    <!-- 注册中心配置 使用不同注册中心需要依赖对应的jar包。如果不使用注册中心,可以把check属性改为false,忽略注册失败。-->
    <!--<motan:registry regProtocol="local" name="registry" />-->
    <!--<motan:registry regProtocol="consul" name="registry" address="127.0.0.1:8500"/>-->
    <motan:registry regProtocol="zookeeper" name="registry" address="127.0.0.1:2181"/>  

    <!-- 协议配置。为防止多个业务配置冲突,推荐使用id表示具体协议。-->
    <motan:protocol id="demoMotan" default="true" name="motan"
                    maxServerConnection="80000" maxContentLength="1048576"
                    maxWorkerThread="800" minWorkerThread="20"/>  

    <!-- 通用配置,多个rpc服务使用相同的基础配置. group和module定义具体的服务池。export格式为“protocol id:提供服务的端口”-->
    <motan:basicService export="demoMotan:8002"
                        group="motan-demo-rpc" accessLog="false" shareChannel="true" module="motan-demo-rpc"
                        application="myMotanDemo" registry="registry" id="serviceBasicConfig"/>  

    <!-- 具体rpc服务配置,声明实现的接口类。-->
    <motan:service interface="com.weibo.motan.demo.service.MotanDemoService"
                   ref="motanDemoService" export="demoMotan:8001" basicService="serviceBasicConfig">
    </motan:service>
    <motan:service interface="com.weibo.motan.demo.service.MotanDemoService"
                   ref="motanDemoService" export="demoMotan:8002" basicService="serviceBasicConfig">
    </motan:service>  

</beans>

启动类:
Java代码 收藏代码

@SpringBootApplication
@EnableAutoConfiguration
@ImportResource(locations={"classpath*:spring/*server.xml"})
public class App {  

    public static void main(String[] args) {
        SpringApplication.run(App.class, args);
    }  

}

下面这个很重要:
Java代码 收藏代码

@Component
@Order(value = 1)
public class MotanSwitcherRunner implements CommandLineRunner {
    @Override
    public void run(String... args) throws Exception {
        // 在使用注册中心时要主动调用下面代码
        MotanSwitcherUtil.setSwitcherValue(MotanConstants.REGISTRY_HEARTBEAT_SWITCHER, true);
        System.out.println("server start...");
    }
}

服务接口:
Java代码 收藏代码

public interface MotanDemoService {  

    String hello(String name);
}

服务实现:
Java代码 收藏代码

@Service("motanDemoService")
public class MotanDemoServiceImpl implements MotanDemoService {  

    public String hello(String name) {
        System.out.println(name);
        return "Hello " + name + "!";
    }  

}

就这么简单,先启动zookeeper,再启动App就可发布motan服务,当应用中既要发布服务,又要引用服务时,可以将注册中心配置单独放在一个配置文件里。另外,不管是dubbo,还是motan,对注解的支持都不是特别好用,所以还是建议采用xml配置。关于消费方怎么用,详细代码见https://github.com/javahongxi/whatsmars的whatsmars-motan-demo 模块。

原文链接:[http://wely.iteye.com/blog/2382243]

时间: 2024-09-11 13:00:46

springboot结合服务化框架motan的相关文章

可能是最详尽的证券服务治理框架思路 | 华泰证券企业服务化思考 | 中生代38期

1.开始之前,请先容许我介绍下华泰证券,华泰证券中全国领先的大型综合性证券集团,具有庞大的客户基础.领先的互联网平台及敏捷协同的全业务链体系,股票代码601688,主营业务主要有经纪及财富管理.投资银行.投资及交易.资产管理.海外业务,经济业务多年保持市场第一,去年系统交易总额35万亿元. 2.券商以往系统建设都依赖于服务厂商,所以也造成了各系统之间的多样异构化,各种类型的系统架构都长期存在,例如集中交易用的恒生系统,主要基于C语言的消息路由架构,自营系统则是恒生系统的tuxdeo架构,管理系统

微博平台的RPC服务化实践概述

2014年第一分钟,新浪微博的发布量以808298条再次刷新记录,第一秒微博发布量相较去年提升55%.(数据来源:新浪科技 )这是微博平台 RPC 框架 "Motan" 上线后第一次抗峰值,整体表现平稳,基本达到最初的"应用方无感知"的目标. 在RPC服务化这个事情上,微博平台不是第一个吃螃蟹的:早的有亚马逊和eBay等国外先驱,近的有Twitter的finagle,淘宝的dubbo等等,网上各种公开的资料铺天盖地.另一方面,单纯的RPC调用功能实现,从技术上看其实

类似Spring Boot的开源框架jboot

jboot jboot is a similar springboot project base on jfinal and undertow,we have using in product environment. jboot 中文描述 jboot是一个基于jfinal.undertow开发的一个类似springboot的开源框架, 我们已经在正式的商业上线项目中使用.她集成了代码生成,微服务,MQ,RPC,监控等功能, 开发者使用及其简单. maven dependency <depend

鹰眼跟踪、EDAS燎原, 看高性能服务框架EDAS的架构实践

本文主要从高速增长的阿里业务开始谈起,讲述当年面对的业务场景和背景,碰到了什么样的技术挑战,且用什么样的思路去解决它,最后和大家分享了解决后产生的产品Aliware中非常重要的EDAS. 直播视频:点此进入 PDF下载:点此进入 以下是演讲内容整理:   高速业务增长带来的挑战 大型电子商务平台吸引了大量卖家和买家,图为2014年IPO时候截得的图,可以看到在阿里上有10亿多件商品等,现在仍然以非常高的速度在增长. 图为2003年到2010年淘宝网注册用户数,用户数从非常低的值逐渐涨到近4000

BNN - 基于low-bits量化压缩的跨平台深度学习框架

写在最前     本文介绍阿里IDST部门研发.基于low-bits量化压缩的深度学习框架BNN(Binary Neural Network),BNN具有以下特点:     1) 跨平台:BNN可以在不同的主流硬件平台上进行部署,包括ARM系列移动端处理器.Intel系列服务器以及正在开发中的NVidia的图形处理器:     2)压缩比高:使用了自研发low-bits量化压缩技术,在算法精度几乎无损的前提下能达到40-100倍压缩率,而且我们也提供无需重新训练的压缩方式,极大简化了迭代周期:

微服务技术栈选型,看了这个别的可以不用看了

前言 大家好,我是敖小剑,今天给大家分享的主题是"利用开源社区打造微服务生态体系". 主要内容如下: 内容分为三个大的部分: 1. 微服务的核心技术 2. 目前可选的开源微服务框架 3. 为微服务提供支撑的基础设施 需要说明的是,由于时间有限,而分享的内容数量太多,因此: 1. 内容都只是罗列,不展开具体介绍 2. 个人知识面有限,列举过程中范围覆盖不足有所遗漏是必然的 3. 部分场景我会给出一些个人建议,但是请注意这些都是我的一家之言,仅供参考 下面列出的是今天将会介绍的内容,数量非

老司机带你玩PPmoney微服务【加强版】

前言 大家晚上好,今天给大家分享的内容是 PPmoney 微服务之路. 首先简单介绍一下,我是来自 ppmoney 的资深架构师 敖小剑,目前负责 ppmoney 的基础架构和服务化推进. 今天分享的内容主要有四个部分: 首先,介绍了一下为什么要选择微服务架构 其次,讲一下我们微服务框架的技术选型 第三,介绍微服务生态中的支撑体系 第四,旧有系统的迁移改造 第一部分 为什么要选择微服务架构 我们先开始第一部分的内容:为什么要选择微服务架构? 先简单介绍一下我们公司--PPmoney(万惠). 4

PPmoney的微服务之路

除了技术内容的分享,敖小剑也提炼了很多在实现微服务过程中团队.管理方面的经验,全文较长,特将这些观点放在文前: 当你推进微服务框架的时候,你不是简单的推进微服务框架,而是推翻整个公司的开发流程. 微服务架构真正成功之处是在于拥抱一个小型.跨智能团队,鼓励扁平.自我管理的组织. 微服务团队应该按照[敖小剑1] [敖小剑2] 业务而不是按照技术来划分组织. 先把自身打造好,然后再孵化满足要求的新型业务开发团队. 资金.技术.专家,缺一不可. 放弃项目思维,引入产品思维. 以下是敖小剑的分享全文. 今

国内大公司的开源项目一览表

奇虎360 https://github.com/Qihoo360 1.MySQL中间层 Atlas Atlas是由 Qihoo 360,  Web平台部基础架构团队开发维护的一个基于MySQL协议的数据中间层项目.它在MySQL官方推出的MySQL-Proxy 0.8.2版本的基础上,修改了大量bug,添加了很多功能特性.目前该项目在360公司内部得到了广泛应用,很多MySQL业务已经接入了Atlas平台,每天承载的读写请求数达几十亿条. 主要功能:* 读写分离* 从库负载均衡* IP过滤*