Spring Cloud Alibaba实战(八) - Dubbo + Nacos

2023-10-27

目录

(一)Nacos动态配置
(二)Nacos注册中心
(三)Sentinel之限流
(四)Sentinel之熔断
(五)Gateway之路由、限流
(六)Gateway之鉴权、日志
(七)Gateway搭配Nacos实现动态路由
(八)Dubbo + Nacos

正文

通常来说,RPC协议比REST具有更好的性能,服务的内部调用可以考虑使用RPC方式来提高效率。下面来改造account和payment服务,在account中通过dubbo协议来调用payment的查询余额接口,并使用Nacos作为注册中心。

首先创建基于Dubbo的payment服务应用(SpringBoot),即providor端:

pom.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>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.5.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.github.autfish</groupId>
    <artifactId>payment-dubbo-service</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>payment-dubbo-service</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>1.8</java.version>
        <alibaba.version>0.9.0.RELEASE</alibaba.version>
    </properties>

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

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
            <version>${alibaba.version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
            <version>${alibaba.version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-dubbo</artifactId>
            <version>${alibaba.version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>

在主类上启用@EnableDiscoveryClient注解

@SpringBootApplication
@EnableDiscoveryClient
public class PaymentDubboServiceApplication {

修改Balance类实现Serializable接口

public class Balance implements Serializable {

    private int id;
    private int diamond;
    private int ticket;
    private String message;

接口声明

public interface BalanceService {

    Balance getBalance(Integer id);
}

接口实现类,注意注解@Service位于dubbo包中而非通常用的Spring注解,并且声明协议为dubbo

import org.apache.dubbo.config.annotation.Service;

import java.util.HashMap;
import java.util.Map;

@Service(protocol = "dubbo")
public class InMemoryBalanceService implements BalanceService {

    final static Map<Integer, Balance> balanceMap = new HashMap() {{
        put(1, new Balance(1, 10, 1000));
        put(2, new Balance(2, 0, 10000));
        put(3, new Balance(3, 100, 0));
    }
    };

    @Override
    public Balance getBalance(Integer id) {
        if(id != null && balanceMap.containsKey(id)) {
            return balanceMap.get(id);
        }
        return new Balance(0, 0, 0, "不存在");
    }
}

在bootstrap.yml中配置Nacos

spring:
  application:
    name: payment-dubbo-service
  main:
    allow-bean-definition-overriding: true
  cloud:
    nacos:
      config:
        server-addr: 127.0.0.1:8848
      discovery:
        enabled: true
        register-enabled: true
        server-addr: 127.0.0.1:8848

在application.yml中配置dubbo

spring:
  profiles:
    active: dev

dubbo:
  scan:
    base-packages: com.github.autfish.dubbo.service
  protocols:
    dubbo:
      name: dubbo
      port: -1
  registry:
    address: spring-cloud://localhost
  application:
    qos:
      enable: false

分别启动Nacos和应用,然后进入Nacos后台可以看到dubbo的声明信息

 

 下面创建account应用。不确定什么原因,使用JAVA 8的dubbo consumer端无法正常启动,这里用JAVA 10创建项目

pom.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>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.5.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.github.autfish</groupId>
    <artifactId>account-dubbo-service</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>account-dubbo-service</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <alibaba.version>0.9.0.RELEASE</alibaba.version>
    </properties>

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

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-actuator</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-dubbo</artifactId>
            <version>${alibaba.version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
            <version>${alibaba.version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>

 同样在主类上启用@EnableDiscoveryClient注解

@SpringBootApplication
@EnableDiscoveryClient
public class AccountDubboServiceApplication {

把实体类Balance.java和接口声明BalanceService.java复制到项目中,并与payment项目中这些类的包名相同

 

User.java

public class User {

    private int id;
    private String name;
    private Balance balance;

AccountController

import org.apache.dubbo.config.annotation.Reference;

@RestController
public class AccountController {

    final static Map<Integer, User> userMap = new HashMap() {{
            put(1, new User(1, "张三"));
            put(2, new User(2, "李四"));
            put(3, new User(3, "王五"));
        }
    };

    @Reference
    private BalanceService balanceService;

    @RequestMapping("/acc/user")
    public User getUser(@RequestParam Integer id) {
        if(id != null && userMap.containsKey(id)) {
            User user = userMap.get(id);
            user.setBalance(balanceService.getBalance(id));
            return user;
        }
        return new User(0, "");
    }
}

bootstrap.yml

spring:
  main:
    allow-bean-definition-overriding: true
  # default disable all
  cloud:
    nacos:
      discovery:
        enabled: true
        register-enabled: true
        server-addr: 127.0.0.1:8848
    zookeeper:
      enabled: false
    consul:
      enabled: false

eureka:
  client:
    enabled: false

ribbon:
  nacos:
    enabled: false

 application.yml

spring:
  application:
    name: account-dubbo-service
dubbo:
  registry:
    address: spring-cloud://localhost
  cloud:
    subscribed-services: ${provider.application.name}
  application:
    qos:
      enable: false
server:
  port: 8085

provider:
  application:
    name: payment-dubbo-service

启动应用并测试

本期源码

链接:https://pan.baidu.com/s/1AMOhmtx9M83NERX9PbmCIA 
提取码:f96r 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Spring Cloud Alibaba实战(八) - Dubbo + Nacos 的相关文章

  • 手把手教你设置Typora的图床-gitee

    所需环境 typora node软件 所需软件及配置文末可下载 typora的激活安装可看以往教程点我查看typora激活 typora结合gitee图床的优势 分享文件只需要分享一个 md文件即可 插入的图片依旧可以访问 图床不限制 访问
  • Python创建索引,批量插入数据测试

    测试 coding utf 8 Created on 2019 6 13 10 19 25 author chenlin3 import esSdk class EsSdkTest def test self name EsSdkTest
  • CVE-2023-21839 【vulhub weblogic 漏洞复现】

    漏洞概述 由于Weblogic IIOP T3协议存在缺陷 当IIOP T3协议开启时 允许未经身份验证的攻击者通过IIOP T3协议网络访问攻击存在安全风险的WebLogic Server 漏洞利用成功WebLogic Server可能被
  • Docker部署springboot项目并连接上docker的mysql

    首先 我是参考着几篇博客 https blog csdn net hangao233 article details 104395693 https www jianshu com p 397929dbc27d 第一步 先在虚拟机或服务器上

随机推荐

  • 【毕业设计】机器学习的员工离职模型研究-python

    目录 前言 课题背景和意义 实现技术思路 变量分析 数据导入 构建机器学习模型 1 1 复制数据删除不需要的变量 1 2 列变量属性分类 实现效果图样例 前言 大四是整个大学期间最忙碌的时光 一边要忙着备考或实习为毕业后面临的就业升学做准备
  • 谁动了我的奶酪:奶酪墙上的话 ----- 整理完整篇

    谁动了我的奶酪墙上的话 如果你无所谓 你会怎样做呢 每天的生活都会因偶然或必然的事而不断变化着 提醒自己要不断地适应变化 拥有奶酪 就拥有幸福 奶酪对你越重要 你就越想抓住它 如果你不改变 你就会被淘汰 如果你无所畏惧 你会怎样做呢 经常闻
  • 类和对象

    1 面向过程 在开发一个程序的时候 看中的是中间的过程 每一个过程步骤都需要自己去做 例如C语言 看中的是过程的开发 2 面向对象 当开发一个程序的时候 不看重具体的过程 看中谁能帮我去完成这件事情 找人 对象 帮我去做 前期去设计类的时候
  • N圆最密堆积、最小外接正方形的matlab求解(二维、三维等圆Packing 问题)

    圆形最密堆积 最小外接正方形的matlab求解 二维 三维等圆Packing 问题 0 前言 1 N个圆的最小外接正方形求解 2 N个球的最小外接立方体求解 惯例声明 本人没有相关的工程应用经验 只是纯粹对相关算法感兴趣才写此博客 所以如果
  • cesium for ue->CesiumRunTime

    共118个文件 23283行 含注释 截至2022年11月10日 剩下118个文件 23283行 截至2022年11月20日 剩下108个文件 21646行
  • react补充--hooks

    1 setState setState更新状态的2种写法 1 setState stateChange callback 对象式的setState 1 stateChange为状态改变对象 该对象可以体现出状态的更改 2 callback是
  • 「AIGC」智能美学,AI绘画 API 激发无限创意

    引言 随着人工智能 AI 技术的迅猛发展 AI绘画 API 正在以惊人的速度改变艺术创作的面貌 它不仅为艺术家和创作者提供了全新的创作工具 还激发了无限的创意和想象力 在这个智能美学的时代 让我们一起探索 AI 绘画 API 如何推动艺术创
  • 【转】数据库的设计(E-R图,数据库模型图,三大范式)

    一 数据库设计的概念 数据库设计是将数据库中的数据实体及这些数据实体之间的关系 进行规划和结构化的过程 二 数据库设计的重要性 如果一个数据库没有进行一个良好的设计 那么这个数据库完成之后他的缺点是 1 效率会很低 2更新和检索数据时会出现
  • python最大最小距离算法贴近度评价法

    1 大最小贴近度评价法 概念 贴近度表示两个模糊几何之间的彼此接近程度 在模糊模式识别方法中采用贴近度的大小识别待判别模糊子集的模式类别 为衡量待识别子集的类别 需要判别各个阶段与标杆模糊集合之间的相对贴近程度 上表中第一列是优化 标杆 模
  • 学习TensorFlow,TensorBoard可视化网络结构和参数

    在学习深度网络框架的过程中 我们发现一个问题 就是如何输出各层网络参数 用于更好地理解 调试和优化网络 针对这个问题 TensorFlow开发了一个特别有用的可视化工具包 TensorBoard 既可以显示网络结构 又可以显示训练和测试过程
  • 春招实习前端面试题汇总

    经历了两个月的复习 笔试 面试 现在总结一下 前端面试中我认为经常被问及的问题 计算机网络部分 tcp udp的区别 三次握手 四次挥手 谈谈你对http协议的理解 这里可以深入学习一下HTTPS http1 2 3 ws协议也可以了解 状
  • linux中,管道能够在同一进程中进行通信吗?

    linux中 管道能够在同一进程中进行通信吗 答案是否定的 管道是用于不同进程之间通信 不能再同一进程中进行通信 同一进程中 直接进行参数传递就行了 不设计通信问题 不同进程之间才需要通信 通信类别有多种 如管道 共享内容 其中 管道又有匿
  • 微服务---今年主要实践路

    福州 2021 04 01 潮湿 享受的天气 还是一如往常脑袋里还是昨天搭建4台服务遇到问题 今天提前1小时到公司 整理思路 今天讲一些普通知识记录 网站高手说明 Spring boot 是 Spring 的一套快速配置脚手架 可以基于sp
  • 第17课 处理边界(增加边界)

    文章目录 1 卷积边界问题 2 处理边界 2 1 BORDER DEFAULT 常用 2 2 BORDER CONSTANT 自定义指定像素值 2 3 BORDER REPLICATE 通过插值计算 2 4 BORDER WRAP 另外一边
  • PAT 5 分小组(字符串与字符转换)

    分小组 java 9名运动员参加比赛 需要分3组进行预赛 有哪些分组的方案呢 我们标记运动员为 A B C I下面的程序列出了所有的分组方法 该程序的正常输出为 ABC DEF GHI ABC DEG FHI ABC DEH FGI ABC
  • qt字符串和数字转换

    字符串转数字 qstring转整数的函数如下 qstring转浮点数的函数如下 字符串转十进制整数 QString str 123 int num str toInt 字符串转二进制 bool ok QString str 123 int
  • docker权限问题,ERROR: Couldn't connect to Docker daemon at http+docker://localunixsocket - is it running

    ERROR Couldn t connect to Docker daemon at http docker localunixsocket is it running 出现这个问题是因为当前用户权限的问题 只要将当前用户加入docker组
  • return R.ok()

    https www cnblogs com liuyi13535496566 p 11626533 html
  • 网络攻防——kali操作系统基本使用-调用摄像头

    1 阅读前的声明 本文章中生成的木马带有一定的攻击性 使用时请遵守网络安全相关的法律法规 恶意攻击操作系统属于违法行为 2 利用kali操作系统的metasploit攻击windows操作系统 kali中打开终端最好是进入root sudo
  • Spring Cloud Alibaba实战(八) - Dubbo + Nacos

    目录 一 Nacos动态配置 二 Nacos注册中心 三 Sentinel之限流 四 Sentinel之熔断 五 Gateway之路由 限流 六 Gateway之鉴权 日志 七 Gateway搭配Nacos实现动态路由 八 Dubbo Na