Dubbo hystrix 熔断降级 详细示例 多服务 公共api

news2024/11/17 6:49:16

目录

介绍

demo-api

pom

目录

代码api

provider 服务提供者

目录

pom

服务实现代码

启动代码

配置

日志

consumer 消费者

目录

pom

调用service接口

调用serviceImpl类

ctr

配置

页面调用熔断效果

相关文章


介绍

因为网上和官网拷贝的文档发现有很多版本迭代出现的jar包冲突 和配置缺少 导致服务启动不起来问题,所有写这一篇 dubbo hystrix 熔断器 多模块模式 的全代码文档,便于使用的时候具体拷贝具体位置,亲测通过正常运行,省去繁琐踩坑分析调整,当中有设计到  sentinel 相关配置可关注可注释掉,相关文档放到下方 sentinel 启动的时候jvm会配置一些链接控制台的东西可看具体文章。

https://blog.csdn.net/weixin_42749765/category_8752962.html

Dubbo hystrix 熔断降级 简单示例 java.lang.NoSuchApplicationBuilder.<init>([Ljava/lang/Object;)V_宇神城主_蒋浩宇的博客-CSDN博客

dubbo Sentinet 限流 流控配置 高级 直连 关联 链路 预热冷启动 排队等待 单机 qps 并发 机器总体法制 单机均摊 集群俩种身份_宇神城主_蒋浩宇的博客-CSDN博客

Dubbo sentinel限流 代码示例 控制台 下载使用_宇神城主_蒋浩宇的博客-CSDN博客 

相关文档有需要看运行没啥问题制作参考即可

demo-api

pom

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.example</groupId>
    <artifactId>demo-api</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>demo-api</name>
 
    <properties>
        <java.version>1.8</java.version>
        <spring-boot.version>1.5.3.RELEASE</spring-boot.version> 
    </properties>
     
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.1</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>${spring-boot.version}</version>
            </plugin>
        </plugins>
    </build>

</project>

目录

代码api

package com.example.demo.dubbo.api;

public interface DemoService {

    String sayHello22(String name);

}

provider 服务提供者

目录

pom

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.example</groupId>
    <artifactId>demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>demo-p</name>
    <description>Demo project for Apache Dubbo</description>

    <properties>
        <java.version>1.8</java.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <dubbo.version>3.1.8</dubbo.version>
        <spring-boot.version>1.5.3.RELEASE</spring-boot.version>
        <hystrix-starter.version>1.4.7.RELEASE</hystrix-starter.version>
        <sentinel.version>1.8.6</sentinel.version>
    </properties>
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>${spring-boot.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>org.apache.dubbo</groupId>
                <artifactId>dubbo-bom</artifactId>
                <version>${dubbo.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>org.apache.dubbo</groupId>
                <artifactId>dubbo-dependencies-zookeeper</artifactId>
                <version>${dubbo.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <dependencies>

        <dependency>
        <groupId>com.example</groupId>
        <artifactId>demo-api</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba.csp</groupId>
            <artifactId>sentinel-apache-dubbo3-adapter</artifactId>
            <version>${sentinel.version}</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba.csp</groupId>
            <artifactId>sentinel-transport-simple-http</artifactId>
            <version>${sentinel.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>

        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-dependencies-zookeeper</artifactId>
            <type>pom</type>
        </dependency>
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
        </dependency>

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


    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.1</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>${spring-boot.version}</version>
            </plugin>
        </plugins>
    </build>

</project>

服务实现代码

package com.example.demo.dubbo.service;

import com.example.demo.dubbo.api.DemoService;

import com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand;
import com.netflix.hystrix.contrib.javanica.annotation.HystrixProperty;
import org.apache.dubbo.config.annotation.DubboService;

@DubboService(version = "1.0.0")
public class DemoServiceImpl implements DemoService {

    @HystrixCommand(commandProperties = {
            @HystrixProperty(name = "circuitBreaker.requestVolumeThreshold", value = "10"),
            @HystrixProperty(name = "execution.isolation.thread.timeoutInMilliseconds", value = "1000")
    })
    @Override
    public String sayHello22(String name) {
        throw new RuntimeException("Exception to show hystrix enabled.");

    }
}

启动代码

package com.example.demo;


import org.apache.dubbo.config.spring.context.annotation.EnableDubbo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.hystrix.EnableHystrix;

@SpringBootApplication
@EnableDubbo
@EnableHystrix
public class DemoApplication {

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

}

配置

dubbo.application.logger=slf4j

server:
  port: 8101
dubbo:
  application:
    name: dubbo-springBoot-demo-provider
  protocol:
    name: dubbo
    port: -1
  registry:
    address: zookeeper://localhost:2181




  management:
    endpoints:
      web:
        exposure:
          include: "*"
    metrics:
      tags:
        application: ${spring.application.name}





日志

###set log levels###
log4j.rootLogger=info, stdout
###output to the console###
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=[%d{hh:mm:ss:sss}] %5p %c{2}: %m%n
log4j.logger.org.apache.zookeeper=warn
log4j.logger.org.apache.dubbo.registry.zookeeper=warn
log4j.logger.org.apache.dubbo.config.deploy=warn
log4j.logger.org.apache.dubbo.registry.client=warn
log4j.logger.org.apache.dubbo.rpc.model=warn

consumer 消费者

目录

pom

<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.example</groupId>
    <artifactId>demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>demo-p</name>
    <description>Demo project for Apache Dubbo</description>

    <properties>
        <java.version>1.8</java.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <dubbo.version>3.1.8</dubbo.version>
        <spring-boot.version>1.5.3.RELEASE</spring-boot.version>
        <hystrix-starter.version>1.4.7.RELEASE</hystrix-starter.version>
        <sentinel.version>1.8.6</sentinel.version>
    </properties>
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>${spring-boot.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>org.apache.dubbo</groupId>
                <artifactId>dubbo-bom</artifactId>
                <version>${dubbo.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>org.apache.dubbo</groupId>
                <artifactId>dubbo-dependencies-zookeeper</artifactId>
                <version>${dubbo.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <dependencies>

        <dependency>
            <groupId>com.example</groupId>
            <artifactId>demo-api</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba.csp</groupId>
            <artifactId>sentinel-apache-dubbo3-adapter</artifactId>
            <version>${sentinel.version}</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba.csp</groupId>
            <artifactId>sentinel-transport-simple-http</artifactId>
            <version>${sentinel.version}</version>
        </dependency>

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

        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-dependencies-zookeeper</artifactId>
            <type>pom</type>
        </dependency>
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
        </dependency>

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


    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.1</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>${spring-boot.version}</version>
            </plugin>
        </plugins>
    </build>

</project>

调用service接口

package com.example.demo.dubbo.consumer;

public interface ConsumerI {
    public String get(String name);
}

调用serviceImpl类

package com.example.demo.dubbo.consumer;

import com.example.demo.dubbo.api.DemoService;
import com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand;
import org.apache.dubbo.config.annotation.DubboReference;
import org.apache.dubbo.config.annotation.DubboService;
import org.springframework.stereotype.Service;

@DubboService
public class Consumer implements ConsumerI  {



    @DubboReference(version = "1.0.0")
    private DemoService demoService;

    @HystrixCommand(fallbackMethod = "reliable")
    @Override
    public String get(String name){
        return demoService.sayHello22(name);
    }
    public String reliable(String name) {
        return "hystrix fallback value";
    }
}

ctr

package com.example.demo.dubbo.consumer;

import com.example.demo.dubbo.api.DemoService;
import org.apache.dubbo.config.annotation.DubboReference;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class ctr {
    @DubboReference
    private ConsumerI c;

    @RequestMapping("/api/v")
    public String v(){return c.get("ss");}
}

配置


# Dubbo 应用名
dubbo.application.logger=slf4j
server:
  port: 8201
dubbo:
  application:
    name: dubbo-springBoot-demo-consumer
  protocol:
    name: dubbo
    port: -1
  registry:
    address: zookeeper://localhost:2181




  management:
    endpoints:
      web:
        exposure:
          include: "*"
    metrics:
      tags:
        application: ${spring.application.name}





###set log levels###
log4j.rootLogger=info, stdout
###output to the console###
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=[%d{hh:mm:ss:sss}] %5p %c{2}: %m%n
log4j.logger.org.apache.zookeeper=warn
log4j.logger.org.apache.dubbo.registry.zookeeper=warn
log4j.logger.org.apache.dubbo.config.deploy=warn
log4j.logger.org.apache.dubbo.registry.client=warn
log4j.logger.org.apache.dubbo.rpc.model=warn

页面调用熔断效果

http://localhost:8201/api/v

相关文章

Dubbo hystrix 熔断降级 示例 java.lang.NoSuchMethod r.SpringApplicationBuilder.<init>([Ljava/lang/Object;)V_宇神城主_蒋浩宇的博客-CSDN博客

ok

持续更新

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/728525.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

axios拦截器和token

axios拦截器 ​​ 在请求或响应被 then 或 catch 处理前拦截它们。 // 添加请求拦截器 axios.interceptors.request.use(function (config) {// 在发送请求之前做些什么return config;}, function (error) {// 对请求错误做些什么return Promise.reject(error);});// 添加响应…

阿里云国际站代理商:阿里巴巴的阿里云到底是做什么用的,怎么我们普通人不理解,也不知道是怎么样一种服务?

阿里巴巴的阿里云到底是做什么用的&#xff0c;怎么我们普通人不理解&#xff0c;也不知道是怎么样一种服务&#xff1f;   阿里巴巴的阿里云&#xff0c;不只是一个名字——打通理解的迷宫   面对朝日逐极而生的科技天光&#xff0c;阿里巴巴如一座灯塔引领者我们向前。然…

openGauss学习笔记-02 openGauss系统架构

文章目录 openGauss学习笔记-02 openGauss系统架构2.1 软件架构2.1.1 逻辑架构2.1.2 逻辑架构说明 openGauss学习笔记-02 openGauss系统架构 openGauss是单机系统&#xff0c;在这样的系统架构中&#xff0c;业务数据存储在单个物理节点上&#xff0c;数据访问任务被推送到服务…

nginx七层代理和四层转发的理解

先来理解一下osi七层模型 应用层 应用层是ISO七层模型的最高层&#xff0c;它直接与用户和应用程序交互&#xff0c;提供用户与网络的接口。它包括各种应用协议&#xff0c;如HTTP、FTP、SMTP等&#xff0c;用于实现特定应用的功能和通信表示层 表示层…

鉴机:粉丝买了一台宝峰uv5r对讲机,竟是假的?

最近有粉丝在某宝上购买了一台uv5r对讲机&#xff0c;回来拆盒后发现有点不对劲&#xff0c;甚至连logo都没有&#xff0c;请各位鉴别一下&#xff0c;看看是真的还是假的。 网友买的uv5r对讲机 其他网友看完后几乎一致认为是假的&#xff0c;有人还贴出来比对照片&#xff1a…

系统版本由Centos7.9恢复到RedHat7.5

问题描述 安装nginx的时候无法联网&#xff0c;通过rpm包进行的安装&#xff0c;打包编译时使用的部分依赖包是centos的资源&#xff0c;导致安装后系统版本由之前的RedHat7.5变成了centos7.9。现需恢复到之前的系统版本。 解决方法 将之前安装的centos资源包删除&#xff0c…

GBASE智赋城轨再下一城!兰州轨道交通2号线开通试运营

“欢迎乘坐兰州轨道交通2号线……”6月29日上午9时36分&#xff0c;伴随一阵悦耳的播报声&#xff0c;兰州轨道交通2号线一期工程开通试运营&#xff0c;面向社会开放。 兰州轨道交通2号线一期工程全长9.06公里&#xff0c;共设置9座车站&#xff0c;2号线的开通试运营宣告兰州…

倍量过左峰选股公式,找到起爆点

左峰简单来说就是前期拉升形成的波段高点&#xff0c;左峰之后是回调&#xff0c;形成凹口&#xff0c;过左峰就是突破前期波段高点。从左峰的数量上&#xff0c;有过一峰、二峰、三峰等&#xff1b;从量价上&#xff0c;有倍量过左峰、缩量过左峰等。本文编写倍量过左峰选股公…

Ubuntu:修改ssh端口并开放防火墙

Ubuntu开放防火墙并修改ssh端口 1、概述2、修改ssh端口并启用防火墙2.1、 修改ssh端口2.2、开启防火墙2.3、端口加入防火墙2.4、查看防火墙中开放的端口2.5、使用新ssh端口连接服务器 3、总结 1、概述 大家好&#xff0c;我是欧阳方超&#xff0c;可以关注我的公众号“欧阳方超…

Vue解决首屏加载缓慢的首屏优化秒开(亲测有效)

一.开启gzip打包 在vue.config.js文件中 &#xff08;1&#xff09;.使用chainWebpack配置的方式 chainWebpack(config){ config.module.rule(vue).use(vue-loader).loader(vue-loader).tap(options > {options.compilerOptions.preserveWhitespace truereturn options…

【数据结构】循环队列

&#x1f680; 作者简介&#xff1a;一名在后端领域学习&#xff0c;并渴望能够学有所成的追梦人。 &#x1f40c; 个人主页&#xff1a;蜗牛牛啊 &#x1f525; 系列专栏&#xff1a;&#x1f6f9;数据结构、&#x1f6f4;C &#x1f4d5; 学习格言&#xff1a;博观而约取&…

OpenGl纹理贴图

给图形赋予颜色时&#xff0c;采用纹理贴图的方式。 每个顶点关联一个纹理坐标(Texture Coordinate),然后在图形的其他片段上进行片段插值(Fragment Interpolation) 顶点坐标如下&#xff1a; float vertices[] { // positions // colors // texture coords 0.2f, 0.2f, 0.0f,…

飞控学习笔记-传感器IMU(陀螺仪+加速度计+磁力计)

陀螺仪 陀螺仪校准 加速度计 加速度不仅包含载体运动的加速度&#xff0c;也包括地球的重力加速度&#xff0c;所以也称为比力计 加速度计标定&#xff08;校准&#xff09; 姿态解算和惯性导航的重要传感器为加速度计、陀螺仪和磁强计&#xff0c;这三种传感器中&#xff0c…

爆肝4万字❤️零基础掌握Verilog HDL

文章目录 0.前言1.Verilog HDL简介1.1 什么是Verilog HDL1.2 verilog发展历史ㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤ1.3 为什么要使用verilog1.4 IP core 2.语法入门详解2.1 数据类型及常量变量2.1.1 数据类型2.1.2 常量2.1.3 变量2.1.3.1 连线型-wire(assign的使用)2.…

【数据分析 - 基础入门之NumPy④】NumPy基本操作 - 一

知识目录 前言一、NumPy介绍1.1 导入NumPy库1.2 查看NumPy版本1.3 读取图片返回NumPy数组 二、创建NumPy数组的十二种方式2.1 array 和 full2.2 zeros 和 ones2.3 随机数数组2.4 服从正态分布的数组2.5 arrange 和 eye、linspace 三、ndarray属性四、ndarray基本操作4.1 索引4.…

渗透专题丨Vulnhub-Tr0ll靶机打靶

首先安装好靶机&#xff0c;再打开Kali&#xff0c;使用ifconfig查看Kali IP信息&#xff0c;之后使用nmap进行扫描网段&#xff1a; image-20230629200225568 经过排除主机IP和Kali IP&#xff0c;选择192.168.38.139&#xff0c;进行端口扫描&#xff1a; image-20230629201…

PDF怎么转Excel?这三个方法非常实用!

在现代生活中&#xff0c;PDF&#xff08;Portable Document Format&#xff09;已成为广泛使用的文件格式之一。然而&#xff0c;有时我们需要将PDF文件中的数据提取并转换为Excel&#xff08;电子表格&#xff09;格式&#xff0c;以便更方便地编辑、分析和处理数据。本文将介…

剑指offer34.二叉树中和为某一值的路径

用深度遍历的方法找出每一条路径&#xff0c;看看和是否是目标值。 class Solution {Deque<Integer> queue new LinkedList<Integer>();List<List<Integer>> res new LinkedList<List<Integer>>();public List<List<Integer>&…

Component name ‘Channel‘ should always be multi-word

新建vue文件后&#xff0c;会出现第一行代码爆红现象 报错原因: 在组件命名的时候未按照 ESLint 的官方代码规范进行命名&#xff0c;根据 ESLint 官方代码风格指南&#xff0c;除了根组件&#xff08;App.vue&#xff09;以外&#xff0c;其他自定义组件命名要使用大驼峰命名方…

IO流总结:

常用方法&#xff1a; 输入&#xff1a; new bufferedreader(new FileReader(“a.txt”))