首页 > 其他分享 >【Dubbo】快速入门案例以及配置详情

【Dubbo】快速入门案例以及配置详情

时间:2022-12-15 20:03:46浏览次数:73  
标签:Dubbo itcast 入门 dubbo user import org cn 详情


文章目录

​​1、Dubbo的前世今生​​

​​2、Dubbo的快速入门​​

​​2.1、Dubbo的基本架构​​

​​2.2、Nacos​​

​​2.3、管理后台​​

​​2.4、入门案例​​

​​2.5、代码优化​​

1、Dubbo的前世今生

2011年10月27日,阿里巴巴开源了自己的SOA服务化治理方案的核心框架Dubbo,服务治理和SOA的设计理念开始逐渐在国内软件行业中落地,并被广泛应用。

  • 早期版本的dubbo遵循SOA的思想,是面向服务架构的重要组件。
  • 如今版本的Dubbo作为Spring Cloud的二进制通信方案来发挥Dubbo的性能优势

2、Dubbo的快速入门

2.1、Dubbo的基本架构

【Dubbo】快速入门案例以及配置详情_分布式架构

节点角色说明:

节点

角色说明

Provider

暴露服务的服务提供方。

Consumer

调用远程服务的服务消费方。

Registry

服务注册与发现的注册中心。

Monitor

统计服务的调用次数和调用时间的监控中心。

调用关系说明:

  1. 服务容器负责启动,加载,运行服务提供者。
  2. 服务提供者在启动时,向注册中心注册自己提供的服务。
  3. 服务消费者在启动时,向注册中心订阅自己所需的服务。
  4. 注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。
  5. 服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。
  6. 服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心。

2.2、Nacos

​Nacos​​是阿里巴巴的产品,是一个集服务发现,配置管理的平台,在国内受欢迎程度较高。

【Dubbo】快速入门案例以及配置详情_分布式_02

1、找到今日资料中的nacos安装包

【Dubbo】快速入门案例以及配置详情_分布式_03

2、解压到没有中文和特殊字符的目录

3、进入bin目录,执行启动命令


#进入bin目录 cd bin #启动 startup.cmd -m standalone


4、浏览器查看:​​http://127.0.0.1:8848/nacos​

2.3、管理后台

​DubboAdmin​​是阿里巴巴管理提供的管理控制台,可以实现服务查询,详情展示,服务测试等功能。借由DubboAdmin可以更好的帮助开发人员对服务进行管理和监控


#1、下载代码: 
git clone https://github.com/apache/dubbo-admin.git
#2、在 dubbo-admin-server/src/main/resources/application.properties中指定注册中心地址
#3、构建
mvn clean package -D maven.test.skip=true
#4、启动
mvn --projects dubbo-admin-server spring-boot:run
#或者
cd dubbo-admin-distribution/target; java -jar dubbo-admin-0.1.jar
#5、访问 http://localhost:8080


2.4、入门案例

需求:使用Dubbo构建分布式架构,完成根据用户id查询用户

【Dubbo】快速入门案例以及配置详情_java_04

2.4.1、服务提供者

搭建环境

(1)创建user-provider模块导入依赖


<dependencies>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!--mybatis-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
</dependency>

<!--dubbo的起步依赖-->
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>2.7.8</version>
</dependency>

<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-registry-nacos</artifactId>
<version>2.7.8</version>
</dependency>
</dependencies>

(2)编写引导类

package cn.itcast.user;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@MapperScan("cn.itcast.user.mapper")
@SpringBootApplication
public class UserProviderApplication {

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

}

代码实现
(1)UserServiceImpl

package cn.itcast.user.service;


import cn.itcast.user.api.UserService;
import cn.itcast.user.domain.User;
import cn.itcast.user.mapper.UserMapper;
import org.apache.dubbo.config.annotation.DubboService;
import org.springframework.beans.factory.annotation.Autowired;

@DubboService
public class UserServiceImpl implements UserService {

@Autowired
private UserMapper userMapper;

//根据id查询用户名称
public String queryUsername(Long id) {
return userMapper.findById(id).getUsername();
}
}

配置文件

server:
port: 18081
spring:
datasource:
url: jdbc:mysql://localhost:3306/dubbo-demo?useSSL=false
username: root
password: root
driver-class-name: com.mysql.jdbc.Driver
application:
name: user-provider
logging:
level:
cn.itcast: debug
pattern:
dateformat: HH:mm:ss:SSS
dubbo:
protocol:
name: dubbo
port: 20881
registry:
address: nacos://127.0.0.1:8848
scan:
base-packages: cn.itcast.user.service

2.4.2、服务消费者
搭建环境
(1)创建user-consumer模块导入依赖

<dependencies>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>


<!--dubbo的起步依赖-->
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>2.7.8</version>
</dependency>

<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-registry-nacos</artifactId>
<version>2.7.8</version>
</dependency>
</dependencies>

(2)配置引导类

package cn.itcast.user;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;


@SpringBootApplication
public class UserConsumerApplication {

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

代码实现

package cn.itcast.user.controller;


import cn.itcast.user.api.UserService;
import cn.itcast.user.domain.User;
import lombok.extern.slf4j.Slf4j;
import org.apache.dubbo.config.annotation.DubboReference;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@Slf4j
@RestController
@RequestMapping("/user")
public class UserController {

//引用远程服务
@DubboReference
private UserService userService;

@GetMapping("/username/1")
public String findUserName(@PathVariable("id") Long id) {
return userService.queryUsername(id);
}
}

配置文件

server:
port: 18080
spring:
application:
name: user-consumer
logging:
level:
cn.itcast: debug
pattern:
dateformat: HH:mm:ss:SSS
dubbo:
registry:
address: nacos://127.0.0.1:8848

2.5、代码优化
将接口抽取为独立模块,并且把接口有关的domain都放到这个模块中
(1)创建user-api模块引入依赖
(2)将UserService接口和User对象导入user-api模块下
(3)User对象实现序列化接口
package cn.itcast.user.domain;

import lombok.Data;

import java.io.Serializable;

@Data
public class User implements Serializable {
private Long id;
private String username;
private String address;
}

标签:Dubbo,itcast,入门,dubbo,user,import,org,cn,详情
From: https://blog.51cto.com/u_15680317/5945897

相关文章

  • 【在线教育】EasyExcel入门
    文章目录​​1.EasyExcel入门​​​​1.1EasyExcel概述​​​​1.2EasyExcel特点​​​​1.3环境搭建​​​​1.3.1测试父项目​​​​1.3.2测试excel项目​​​​1......
  • Spring Security 安全框架入门原理及实战
    SpringSecurity入门原理及实战在web应用开发中,安全无疑是十分重要的,选择SpringSecurity来保护web应用是一个非常好的选择。SpringSecurity是spring项目之中的一个安全......
  • Dubbo性能调优参数
    dubbo参数说明:https://dubbo.apache.org/zh/docs3-v2/java-sdk/reference-manual/config/properties/调优参考:https://blog.csdn.net/yudianxiaoxiao/article/details/123......
  • dubbo的线程模型与线程池策略
    Dubbo默认的底层网络通讯使用的是Netty,服务提供方NettyServer使用两级线程池,其中EventLoopGroup(boss)主要用来接受客户端的链接请求,并把接受的请求分发给EventLoopGrou......
  • 系统入门到实战学习某项技术、有问题找"百度"、学习大佬的技术博客、找开源代码等资料
    一、系统入门到实战学习某项技术先看视频入门到实战(B站、慕课网)然后看书,再把知识的体系串起来二、有问题找"百度"1、学习各种疑惑,问搜索引擎【最大的学习资料库】■搜索......
  • Servlet_概述与Servlet_快速入门
    Servlet_概述Servlet:  server  applet概念:运行在服务器端的小程序 Servlet就是一个接......
  • Java-快速入门、IDEA开发工具的使用1-笔记
    1.Java的概述Java是sun公司1995推出的,2009年被oracle收购Java的爸爸:詹姆斯.高斯林Java是一门高级编程语言:语言风格接近人类的自然语言,写程序简单易懂Java的流行度很高,商业占......
  • 深度学习入门No module named 'common'问题
    这⾥的“common”模块是源代码中作者⾃⼰写的,将下载的源⽂件夹“【源代码】深度学习⼊门:基于Python的理论与实现”改名为book_code,并且将sys.path.append(os.pardir)#......
  • WPF深入简出(一)入门必看
    一、前言最近开始学习WPF,因为之间有一些winform的经验,所以想把WPF的学习过程记录下来,已被后查,本篇主要讲一些基础知识,介绍如何使用Visual Studio 2022创建一个WPF应用程......
  • kettle学习笔记(一)——入门与安装
    一、概述1.kettle是什么国外开源的ETL工具,纯java编写,可以在Window、Linux、Unix上运行,绿色无需安装,数据抽取高效稳定。中文名称叫水壶,该项目的主程序员MATT希望把各种数据......