首页 > 其他分享 >如何基于 Spring Boot 快速开发一个 Dubbo 微服务应用

如何基于 Spring Boot 快速开发一个 Dubbo 微服务应用

时间:2022-12-20 09:00:09浏览次数:68  
标签:Dubbo name dubbo spring boot Boot samples Spring consumer

Dubbo 还提供了包括XMLAPI等多种启动与接入方式,更多开发方式和配置细节可参见配置手册

下载示例代码

完整示例代码在 dubbo-samples 中。

  1. 下载源码
git clone -b master https://github.com/apache/dubbo-samples.git
  1. 进入示例目录
cd dubbo-samples/1-basic/dubbo-samples-spring-boot
ls # 查看目录结构

快速运行示例

  1. 编译 Provider
    在 dubbo-samples-spring-boot 目录执行 maven 命令
mvn clean package
  1. 运行 Provider
    进入 dubbo-samples-spring-boot-provider/target 目录并启动 java 进程
cd ./dubbo-samples-spring-boot-provider
java -jar ./target/dubbo-samples-spring-boot-provider-1.0-SNAPSHOT.jar
  1. 运行 consumer
    进入 dubbo-samples-spring-boot-consumer 目录并启动 java 进程
java -jar ./target/dubbo-samples-spring-boot-consumer-1.0-SNAPSHOT.jar
  1. 查看结果
    在 consumer 侧会输出如下信息:
result: Hello World

在 provider 侧会输出如下信息:

Hello World, request from consumer: xxx.xxx.xxx.xxx

至此就把 Dubbo 的基本功能都实现了,可以在 Dubbo 的基础上进行更多的开发。

示例核心流程

关于示例的更详细解读可参见 注解配置

1. 定义服务接口

dubbo-samples-spring-boot-interface/DemoService.java

package org.apache.dubbo.samples.basic.api;

public interface DemoService {
    String sayHello(String name);
}

2. 提供方实现接口并暴露服务

dubbo-samples-spring-boot-provider/DemoServiceImpl.java

@DubboService
public class DemoServiceImpl implements DemoService {
    @Override
    public String sayHello(String name) {
        System.out.println("Hello " + name + ", request from consumer: " + RpcContext.getContext().getRemoteAddress());
        return "Hello " + name;
    }
}

3. 配置 application.yml 文件

dubbo-samples-spring-boot-provider/resources/application.yml

dubbo:
  application:
    name: dubbo-springboot-demo-provider
  protocol:
    name: dubbo
    port: -1
  registry:
    id: zk-registry
    address: zookeeper://127.0.0.1:2181
  config-center:
    address: zookeeper://127.0.0.1:2181
  metadata-report:
    address: zookeeper://127.0.0.1:2181

4. 定义 Spring Boot 主函数

dubbo-samples-spring-boot-provider/ProviderApplication.java

@SpringBootApplication
@EnableDubbo
public class ProviderApplication {
    public static void main(String[] args) throws Exception {
        new EmbeddedZooKeeper(2181, false).start();

        SpringApplication.run(ProviderApplication.class, args);
        System.out.println("dubbo service started");
        new CountDownLatch(1).await();
    }
}

其中,@EnableDubbo 必须配置。

5. 引用远程服务

dubbo-samples-spring-boot-consumer/ConsumerApplication.java

public class ConsumerApplication {
    @DubboReference
    private DemoService demoService;
}

6. 定义 application.yml

dubbo-samples-spring-boot-consumer/application.yml

dubbo:
  application:
    name: dubbo-springboot-demo-consumer
  protocol:
    name: dubbo
    port: -1
  registry:
    id: zk-registry
    address: zookeeper://127.0.0.1:2181
  config-center:
    address: zookeeper://127.0.0.1:2181
  metadata-report:
    address: zookeeper://127.0.0.1:2181

7. 加载 Spring 配置,并调用远程服务

dubbo-samples-spring-boot-consumer/ConsumerApplication.java

@SpringBootApplication
@Service
@EnableDubbo
public class ConsumerApplication {
    @DubboReference
    private DemoService demoService;
    
    public String doSayHello(String name) {
        return demoService.sayHello(name);
    }

    public static void main(String[] args) {
        ConfigurableApplicationContext context = SpringApplication.run(ConsumerApplication.class, args);
        ConsumerApplication application = context.getBean(ConsumerApplication.class);
        String result = application.doSayHello("world");
        System.out.println("result: " + result);
    }
}

其中,@EnableDubbo 必须配置。

原文首于 Dubbo 官网:https://cn.dubbo.apache.org/zh/overview/quickstart/
欢迎在 https://github.com/apache/dubbo 给 Dubbo Star。
搜索关注官方微信公众号:Apache Dubbo,了解更多业界最新动态,掌握大厂面试必备 Dubbo 技能

标签:Dubbo,name,dubbo,spring,boot,Boot,samples,Spring,consumer
From: https://www.cnblogs.com/apache-dubbo/p/16993527.html

相关文章

  • 【sping框架】 springboot框架中如何整合mybatis框架?
    1.引入依赖spring-boot-stater-webmysql相关mysql驱动druid数据源mybatis相关的(mybatis-spring-boot-stater)依赖(mybatismybatis-spring)2.书写配置 a.开启......
  • SpringMVC传递json字符串,后台接口通过变量接收
    前景介绍在我们日常开发过程中,前台向后台传递参数一般是json或者form表单方式,并且最好统一一种传输方式,不建议json+form混合使用,但是由于form表单在数组结构下拼接比较......
  • Spring 5 中文解析之核心篇-IoC容器(上)
    概述​​Spring​​​使得开发人员更加容易的创建企业级应用程序,它提供了在企业Java生态技术栈中的任何技术体系,同时也提供了​​Groovy​​​和​​Kotlin​​​对JVM的支......
  • 3种 Springboot 全局时间格式化方式,别再写重复代码了
    “本文收录在个人博客:www.chengxy-nds.top,技术资料共享,同进步”时间格式化在项目中使用频率是非常高的,当我们的API接口返回结果,需要对其中某一个date字段属性进行......
  • Spring Security 动态url权限控制
    一、前言本篇文章将讲述SpringSecurity动态分配url权限,未登录权限控制,登录过后根据登录用户角色授予访问url权限基本环境 spring-boot2.1.8mybatis-plus2.2.0......
  • 狂神说 spring mvc 完整版
    springmvc1、回顾MVC1.1、什么是MVCMVC是模型(Model)、视图(View)、控制器(Controller)的简写,是一种软件设计规范。是将业务逻辑、数据、显示分离的方法来组织代码。MVC主......
  • Spring Boot 入门
    ​​spring​​ Boot是Spring社区较新的一个项目。该项目的目的是帮助开发者更容易的创建基于Spring的应用程序和服务,让更多人的人更快的对Spring进行入门体验,让​​Java​......
  • Spring处理跨域请求
    [nio-8080-exec-8]o.s.web.cors.DefaultCorsProcessor    :SkipCORSprocessing:requestisfromsameorigin一次正常的请求最近别人需要调用我们系统的某一个......
  • How to use JDBC-Authentication of Spring Boot/Spring Security with Flyway
     java.lang.IllegalStateException:FailedtoloadApplicationContextatorg.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadCon......
  • 搭建SpringBoot+Promitheus+Grafana自动监控平台
    Springboot部分:pom.xml<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency><dep......