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 模块。

相关文章
|
26天前
|
XML 安全 Java
|
29天前
|
缓存 NoSQL Java
什么是缓存?如何在 Spring Boot 中使用缓存框架
什么是缓存?如何在 Spring Boot 中使用缓存框架
47 0
|
1月前
|
数据采集 监控 前端开发
二级公立医院绩效考核系统源码,B/S架构,前后端分别基于Spring Boot和Avue框架
医院绩效管理系统通过与HIS系统的无缝对接,实现数据网络化采集、评价结果透明化管理及奖金分配自动化生成。系统涵盖科室和个人绩效考核、医疗质量考核、数据采集、绩效工资核算、收支核算、工作量统计、单项奖惩等功能,提升绩效评估的全面性、准确性和公正性。技术栈采用B/S架构,前后端分别基于Spring Boot和Avue框架。
|
2月前
|
Java API 数据库
构建RESTful API已经成为现代Web开发的标准做法之一。Spring Boot框架因其简洁的配置、快速的启动特性及丰富的功能集而备受开发者青睐。
【10月更文挑战第11天】本文介绍如何使用Spring Boot构建在线图书管理系统的RESTful API。通过创建Spring Boot项目,定义`Book`实体类、`BookRepository`接口和`BookService`服务类,最后实现`BookController`控制器来处理HTTP请求,展示了从基础环境搭建到API测试的完整过程。
60 4
|
2月前
|
JavaScript 安全 Java
如何使用 Spring Boot 和 Ant Design Pro Vue 实现动态路由和菜单功能,快速搭建前后端分离的应用框架
本文介绍了如何使用 Spring Boot 和 Ant Design Pro Vue 实现动态路由和菜单功能,快速搭建前后端分离的应用框架。首先,确保开发环境已安装必要的工具,然后创建并配置 Spring Boot 项目,包括添加依赖和配置 Spring Security。接着,创建后端 API 和前端项目,配置动态路由和菜单。最后,运行项目并分享实践心得,包括版本兼容性、安全性、性能调优等方面。
190 1
|
2月前
|
Java API 数据库
Spring Boot框架因其简洁的配置、快速的启动特性及丰富的功能集而备受开发者青睐
本文通过在线图书管理系统案例,详细介绍如何使用Spring Boot构建RESTful API。从项目基础环境搭建、实体类与数据访问层定义,到业务逻辑实现和控制器编写,逐步展示了Spring Boot的简洁配置和强大功能。最后,通过Postman测试API,并介绍了如何添加安全性和异常处理,确保API的稳定性和安全性。
51 0
|
4天前
|
设计模式 XML Java
【23种设计模式·全精解析 | 自定义Spring框架篇】Spring核心源码分析+自定义Spring的IOC功能,依赖注入功能
本文详细介绍了Spring框架的核心功能,并通过手写自定义Spring框架的方式,深入理解了Spring的IOC(控制反转)和DI(依赖注入)功能,并且学会实际运用设计模式到真实开发中。
【23种设计模式·全精解析 | 自定义Spring框架篇】Spring核心源码分析+自定义Spring的IOC功能,依赖注入功能
|
12天前
|
IDE Java 测试技术
互联网应用主流框架整合之Spring Boot开发
通过本文的介绍,我们详细探讨了Spring Boot开发的核心概念和实践方法,包括项目结构、数据访问层、服务层、控制层、配置管理、单元测试以及部署与运行。Spring Boot通过简化配置和强大的生态系统,使得互联网应用的开发更加高效和可靠。希望本文能够帮助开发者快速掌握Spring Boot,并在实际项目中灵活应用。
28 5
|
22天前
|
缓存 Java 数据库连接
Spring框架中的事件机制:深入理解与实践
Spring框架是一个广泛使用的Java企业级应用框架,提供了依赖注入、面向切面编程(AOP)、事务管理、Web应用程序开发等一系列功能。在Spring框架中,事件机制是一种重要的通信方式,它允许不同组件之间进行松耦合的通信,提高了应用程序的可维护性和可扩展性。本文将深入探讨Spring框架中的事件机制,包括不同类型的事件、底层原理、应用实践以及优缺点。
51 8
|
1月前
|
存储 Java 关系型数据库
在Spring Boot中整合Seata框架实现分布式事务
可以在 Spring Boot 中成功整合 Seata 框架,实现分布式事务的管理和处理。在实际应用中,还需要根据具体的业务需求和技术架构进行进一步的优化和调整。同时,要注意处理各种可能出现的问题,以保障分布式事务的顺利执行。
57 6