大发快3_快3高手计划_大发快3高手计划 - 最好的大发快3,快3高手计划,大发快3高手计划平台,QQ技术教程网,分享QQ技巧,网站源码,福利软件,热门视频等各种资源

[Spring cloud 一步步实现广告系统] 19. 监控Hystrix Dashboard

  • 时间:
  • 浏览:0

在前一天的18次文章中,亲戚亲戚另一个人歌词 歌词 实现了广告系统的广告投放广告检索业务功能,上边使用到了 服务发现Eureka服务调用Feign,网关路由Zuul以及错误熔断HystrixSpring Cloud组件。

简单调用关系:

之后 系统往往还会报错,亲戚亲戚另一个人歌词 歌词 前一天定义了许多容错类和法子,之后 就说 在控制台须要想看 错误信息,亲戚亲戚另一个人歌词 歌词 我应该 统计许多数据,何如都里能 更直观的想看 亲戚亲戚另一个人歌词 歌词 的服务调用情況呢,接下来,和亲戚亲戚另一个人歌词 歌词 讨论另另两个 新的熔断监控组件Hystrix Dashboard,顾名思义,从名字上亲戚亲戚另一个人歌词 歌词 就能看出来,它是监控的图形化界面。

Hystrix 在服务中的使用

结合openfeign使用

在亲戚亲戚另一个人歌词 歌词 实际的项目当中,使用的最多的就说 结合FeignClient#fallbackHystrix一块儿来实现熔断,亲戚亲戚另一个人歌词 歌词 看一下亲戚亲戚另一个人歌词 歌词 在mscx-ad-feign-sdk中的实现。

@FeignClient(value = "mscx-ad-sponsor", fallback = SponsorClientHystrix.class)
public interface ISponsorFeignClient {
    @RequestMapping(value = "/ad-sponsor/plan/get", method = RequestMethod.POST)
    CommonResponse<List<AdPlanVO>> getAdPlansUseFeign(@RequestBody AdPlanGetRequestVO requestVO);

    @RequestMapping(value = "/ad-sponsor/user/get", method = RequestMethod.GET)
    /**
     * Feign 埋坑之 之后

是Get请求,须要在所有参数前加进去去{@link RequestParam},只有使用{@link Param}
     * 会被自动转发为POST请求。
     */
    CommonResponse getUsers(@RequestParam(value = "username") String username);
}

在上述代码中,亲戚亲戚另一个人歌词 歌词 自定义了另另两个 feignclient,之后 给了这个client另另两个 fallback的实现类:

@Component
public class SponsorClientHystrix implements ISponsorFeignClient {
    @Override
    public CommonResponse<List<AdPlanVO>> getAdPlansUseFeign(AdPlanGetRequestVO requestVO) {
        return new CommonResponse<>(-1, "mscx-ad-sponsor feign & hystrix get plan error.");
    }

    @Override
    public CommonResponse getUsers(String username) {
        return new CommonResponse<>(-1, "mscx-ad-sponsor feign & hystrix get user error.");
    }
}

这个fallback类实现了亲戚亲戚另一个人歌词 歌词 自定义的ISponsorFeignClient,那是之后 fallback的法子须要和原始执行类的法子签名保持一致,前一天在执行失败的前一天,须要通过反射映射到响应的降级法子/容错法子。

mscx-ad-search服务中,亲戚亲戚另一个人歌词 歌词 通过注入ISponsorFeignClient来调用亲戚亲戚另一个人歌词 歌词 的mscz-ad-sponsor服务。

@RestController
@Slf4j
@RequestMapping(path = "/search-feign")
public class SearchFeignController {

    /**
     * 注入亲戚亲戚另一个人歌词

歌词



自定义的FeignClient
     */
    private final ISponsorFeignClient sponsorFeignClient;
    @Autowired
    public SearchFeignController(ISponsorFeignClient sponsorFeignClient) {
        this.sponsorFeignClient = sponsorFeignClient;
    }

    @GetMapping(path = "/user/get")
    public CommonResponse getUsers(@Param(value = "username") String username) {
        log.info("ad-search::getUsersFeign -> {}", JSON.toJSONString(username));
        CommonResponse commonResponse = sponsorFeignClient.getUsers(username);
        return commonResponse;
    }
}
使用HystrixCommand

随便说说Hystrix本身提供了本身直接在法子中应用的法子,就说 使用@ com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand,亲戚亲戚另一个人歌词 歌词 看一下这个类的源码:

@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Inherited
@Documented
public @interface HystrixCommand {
    ...

        /**
     * Specifies a method to process fallback logic.
     * A fallback method should be defined in the same class where is HystrixCommand.
     * Also a fallback method should have same signature to a method which was invoked as hystrix command.
     * for example:
     * <code>
     *      @HystrixCommand(fallbackMethod = "getByIdFallback")
     *      public String getById(String id) {...}
     *
     *      private String getByIdFallback(String id) {...}
     * </code>
     * Also a fallback method can be annotated with {@link HystrixCommand}
     * <p/>
     * default => see {@link com.netflix.hystrix.contrib.javanica.command.GenericCommand#getFallback()}
     *
     * @return method name
     */
    String fallbackMethod() default "";

    ...
}

亲戚亲戚另一个人歌词 歌词 主要关注另另两个 点:

  1. @Target({ElementType.METHOD})表明当前的注解只有应用在法子上边。
  2. 可直接定义fallbackMethod来保证容错。这个法子有另另两个 缺陷,就说 须要和执行法子在同另另两个 类文件中,这就会造成亲戚亲戚另一个人歌词 歌词 的法子在实现的前一天,显得特别的冗余和缺陷优雅。

以亲戚亲戚另一个人歌词 歌词 的mscx-ad-search中的广告查询为例:

@Service
@Slf4j
public class SearchImpl implements ISearch {

    /**
     * 查询广告容错法子
     *
     * @param e 第两个参数须要不指定,之后

须要跟踪错误,就指定上
     * @return 返回另另两个

空map 对象
     */
    public SearchResponse fetchAdsFallback(SearchRequest request, Throwable e) {

        System.out.println("查询广告失败,进入容错降级 : %s" + e.getMessage());
        return new SearchResponse().builder().adSlotRelationAds(Collections.emptyMap()).build();
    }

    @HystrixCommand(fallbackMethod = "fetchAdsFallback")
    @Override
    public SearchResponse fetchAds(SearchRequest request) {
        ...
    }
}

在亲戚亲戚另一个人歌词 歌词 请求出错的前一天,会转到亲戚亲戚另一个人歌词 歌词 的fallback法子,这个实现是通过在应用启动的前一天,亲戚亲戚另一个人歌词 歌词 刚开始了@EnableCircuitBreaker注解,这个注解会通过AOP拦截所有的HystrixCommand法子,将HystrixCommand整合到springboot的容器中,之后 将注解标注的法子倒进hystrix的守护进程中,一旦失败,通过反射调用fallback法子来实现。

创建dashboard project

上述代码亲戚亲戚另一个人歌词 歌词 想看 Hystrix实现熔断的2种法子,接下来亲戚亲戚另一个人歌词 歌词 来实现请求监控的图形化界面,创建mscx-ad-dashboard,Let's code.

依然遵从亲戚亲戚另一个人歌词 歌词 springboot项目的三部曲:

  1. 加依赖

    <dependencies>
         <dependency>
             <groupId>org.springframework.cloud</groupId>
             <artifactId>spring-cloud-starter-hystrix</artifactId>
             <version>1.2.7.RELEASE</version>
         </dependency>
         <dependency>
             <groupId>org.springframework.cloud</groupId>
             <artifactId>spring-cloud-starter-hystrix-dashboard</artifactId>
             <version>1.2.7.RELEASE</version>
         </dependency>
         <!--eureka client-->
         <dependency>
             <groupId>org.springframework.cloud</groupId>
             <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
         </dependency>
         <dependency>
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-actuator</artifactId>
         </dependency>
     </dependencies>
  2. 加注解

    /**
       * AdDashboardApplication for Hystrix Dashboard 启动类
       *
       * @author <a href="mailto:magicianisaac@gmail.com">Isaac.Zhang | 若初</a>
       * @since 2019/8/15
       */
        @SpringBootApplication
        @EnableDiscoveryClient
        @EnableHystrixDashboard
        public class AdDashboardApplication {
    
            public static void main(String[] args) {
                SpringApplication.run(AdDashboardApplication.class, args);
            }
        }
  3. 改配置

        server:
            port: 1234
        spring:
            application:
                name: mscx-ad-dashboard
        eureka:
            client:
                service-url:
                defaultZone: http://server1:7777/eureka/,http://server2:8888/eureka/,http://server3:9999/eureka/
        management:
            endpoints:
                web:
                exposure:
                    include: "*"`

直接启动,须要想看 如下页面:

加进去去要监控的服务地址: