Spring-Retry实现及原理 重试,其实我们其实很多时候都需要的,为了保证容错性,可用性,一致性等。一般用来应对外部系统的一些不可预料的返回、异常等,特别是网络延迟,中断等情况。还有在现在流行的微服务治理框架中,通常都有自己的重试与超时配置,比如dubbo可以设置retries=1,timeout=500调用失败只重试1次,超过500ms调用仍未返回则调用失败。如果我们要做重试,要为特定的某个操作做重试功能,则要硬编码,大概逻辑基本都是写个循环,根据返回或异常,计数失败次数,然后设定退出条件。
设计模式之观察者模式 一、观察者模式 观察者模式(Observer),又叫发布-订阅模式(Publish/Subscribe),定义对象间一种一对多的依赖关系,使得每当一个对象改变状态,则所有依赖于它的对象都会得到通知并自动更新。UML结构图如下: 其中,Subject类是主题,它把所有对观察者对象的引用文件存在了一个聚集里,每个主题都可以有任何数量的观察者。抽象主题提供了一个接口,可以增加和删除观察者对象;Observer类是抽象观察者,为所有的具体观察者定...
Apache RocketMQ源码学习之生产者发送消息 一、消息发送方式RocketMQ 支持常见的三种发送方式:SYNC、ASYNC、ONEWAYSYNC : 同步的发送方式,会等待发送结果后才返回。ASYNC : 异步的发送方式,发送完后,立刻返回。ONEWAY : 发出去后,什么都不管直接返回。二、RocketMQ生产者发送消息流程...
Apache RocketMQ源码学习之生产者启动 一、RocketMQ核心组件以及关系核心组件: producer:消息生产者,生产者的作用就是将消息发送到 MQ producer group:生产者组,简单来说就是多个发送同一类消息的生产者称之为一个生产者组 consumer :消息消费者,简单来说,消费 MQ 上的消息的应用程序就是消费者 consumer group:消费者组,和生产者类似,消费同一类消息的多个 consumer 实例组成一个消费者组 topic:是一种消息的逻辑分类 message : Message 是...
SpringBoot使用Sharding-JDBC分库分表实战 一、准备工作1.准备两个database、4张table二、引入相关maven <!-- druid --> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.1.9</ve.
设计模式之责任链模式 概念职责链模式(Chain of Responsibility)使多个对象都有机会处理同一个请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。责任链设计模式中的角色Handler抽象处理者(定义一个处理请求的接口,接口可以定义出一个方法,以设定和返回对下家的引用。通常由一个抽象类或接口实现)Concrete Handler具体处理者(具体请求者在接受到请求后,如果满足条件则自己处理请求,否则将请求传.
记一次Java并发本地内存、主内存相关 一、先上一段代码:package com.wx.wxjob;public class Test { public static void main(String[] args) { Aobing a = new Aobing(); a.start(); for (; ; ) { if (a.isFl...
代码优化之抽象类的引入 一、场景 场景:有个给不同类型的数据打上标签的功能。不同数据类型生成的标签规则不一样。二、编码实现1、首先定义一个抽象类(统一需要实现的方法)/** * FileName: AbstractMakeTagHandler * Author: pengyd * Date: 2020/3/13 * function: */public abstract clas...
SpringBoot项目整合Vue 一、首先需要安装vue所需环境以及基本项目架构(自行百度)vue项目架构如图:二、需要改动的页面App.vue<template> <div id="app"> <img src="./assets/logo.png"> <router-view/> </div></templa...
catch中为什么不建议使用e.printStackTrace 为什么尽量不用e.printStackTrace直接用e.printStackTrace来打印日志有错吗?当然不错,但是不好。主要原因有以下几点:1、占用太多内存,造成锁死要打印字符串输出到控制台上,需要字符串常量池所在的内存块有足够的空间。然而,因为e.printStackTrace() 语句要产生的字符串记录的是堆栈信息,太长太多,内存被填满了!大量线程产出字符串产出到一半,等待有...
利用反射重构代码 一、需求先看代码:两个方法几乎一模一样,唯一的区别就是传入的对象不同二、改造利用反射,将对象映射成map,看代码:public Map<String, Object> class2Map(Object obj) { Class aClass = obj.getClass(); Field[] declaredFields = a...
阿里RoceketMQ使用 一、配置文件#该应用是否启用生产者rocketmq: producer: isOnOff: on #发送同一类消息的设置为同一个group,保证唯一,默认不需要设置,rocketmq会使用ip@pid(pid代表jvm名字)作为唯一标示 groupName: ${spring.application.name} #mq的nameserver地址 ...
工厂+策略模式消除if-else 需求代码改造:JSONArray result = new JSONArray(); switch (code) { case SUBJECT_IFACE_CODE: for (int i = 0, size = values.size(); i < size; i++) { ...
优雅的消除代码中的if-else 需求假设有这么一个需求:一个电商系统,当用户消费满1000 金额,可以根据用户VIP等级,享受打折优惠。根据用户VIP等级,计算出用户最终的费用。 普通会员 不打折 白银会员 优惠50元 黄金会员 8折 白金会员 优惠50元,再打7折 编码实现private static double getResult(long money, int ty...
SQL中关于IN和EXISTS的用法 一、执行历程sql语句:select * from student s where EXISTS(select stuid from score ss where ss.stuid = s.stuid)执行顺序: (1)先执行:select * from student s (2)再执行:EXISTS(select stuid from score ss where ss.st...