![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
spring
Mckzxs
逆水舟
展开
-
rabbitmq消费消息:结合redis保证消息不被重复消费
如果对判断的稳定性和鲁棒性要求高,使用数据库存储消息实体,同时将 msg_id 作为数据库表的唯一键,插入重复记录一定会抛出异常,避免数据库因为并发问题产生脏数据,保证了消息消费的不可重复性。通用解决方案是在消息实体中添加全局唯一的id,例如 msg_id(消息ID),在代码中保证消息的幂等性,如果不存在已有消息,那么消费之后,将 msg_id 对应的消息实体或者序列化对象写入缓存或者数据库;如果存在已有消息,说明这条消息已被消费过,丢弃消息并且打一条告警日志。原创 2023-01-02 23:12:12 · 1099 阅读 · 0 评论 -
rabbitmq消息发送的可靠性:结合mysql来保证消息投递的可靠性
4. 设置一个定时任务:10秒执行一次. 根据(status)状态0并且重试时间(try_time)< sysdate()当前时间查询出List rabbitmqSendLogs消息的数量rabbitmqSendLogs。5.遍历所有消息rabbitmqSendLogs.forEach。定时任务,每隔10秒冲数据库查询,然后再从新投递到mq。数据表rabbitmq_send_log。接收rabbitmq消息的类。原创 2023-01-02 21:55:14 · 716 阅读 · 0 评论 -
springboot整合rabbitMQ及手动ack确认
RabbitCallbackConfig.javaWorkCustomer.javaTTest.java原创 2022-06-02 17:33:21 · 2730 阅读 · 0 评论 -
redis做限流量
定义一个注解标明需要使用限流的接口import java.lang.annotation.*;import static java.lang.annotation.ElementType.METHOD;import static java.lang.annotation.RetentionPolicy.RUNTIME;@Retention(RUNTIME)@Target(METHOD)public @interface AccessLimit { int seconds()原创 2022-03-28 11:25:31 · 1433 阅读 · 0 评论 -
二.JSR303数据校验数据结合全局异常处理
@RequestMapping("/save") public R save(@Valid @RequestBody BrandEntity brand) {// if (bindingResult.hasErrors()) {// HashMap<Object, Object> map = new HashMap<>();// //获取错误的校验结果// bindingResu...原创 2021-09-29 16:35:03 · 167 阅读 · 0 评论 -
一.JSR303数据校验数据
1.给bean的字段添加校验注解(javax.validation.constraints.),并自定义message提示import com.baomidou.mybatisplus.annotation.TableId;import com.baomidou.mybatisplus.annotation.TableName;import java.io.Serializable;import java.util.Date;import lombok.Data;import org.hi原创 2021-09-27 11:24:59 · 147 阅读 · 0 评论 -
linux部署jar引入声网libagora_rtm_sdk.so。nested exception is java.lang.UnsatisfiedLinkError: no agora_rtm_s
当我们jar项目需要用到第三方非java库,例如libagora_rtm_sdk.so,那我们要怎么引入呢?java会在System.getProperty("java.library.path")); // Java lib路径,引入.so库。寻找.so文件要放入的位置,然后把库放入位置在linux中寻找libagora_rtm_sdk.so文件放入的位置,当我们不知道放到哪里的时候,利用System.getProperty("java.library.path"));就会打印出Java li原创 2021-07-01 17:32:39 · 644 阅读 · 0 评论 -
@ControllerAdvice 配合 @ExceptionHandler 实现自定义全局异常处理
对于@ControllerAdvice,结合@ExceptionHandler用于全局异常的处理。@ExceptionHandler的作用主要在于声明一个或多个类型的异常,当符合条件的Controller抛出这些异常之后将会对这些异常进行捕获,然后按照其标注的方法的逻辑进行处理,从而改变返回的视图信息。1.ExceptionEnum异常枚举信息分类,状态码等。package com.tenq.exception;import lombok.Getter;/** */@Getter.原创 2020-12-09 13:59:05 · 597 阅读 · 0 评论 -
自己封装一个接口返回对象
调用接口返回数据给前端的对象1.比如添加成功返回2.比如查询成功还需要返回一个对象3.比如查询成功需要返回一个分页对象接口返回总共4个数据。Object为返回的数据 private boolean flag;//是否成功 private Integer code;//返回码 private String message;//返回信息 private Object object;//返回数据1.封装接口返回对象;package co.原创 2020-12-09 10:31:22 · 970 阅读 · 0 评论 -
雪花算法分布式id工具类
package util;import java.lang.management.ManagementFactory;import java.net.InetAddress;import java.net.NetworkInterface;/** * <p>名称:IdWorker.java</p> * <p>描述:分布式自增长ID</p> * <pre> * Twitter的 Snowflake JAVA实现方案 *.原创 2020-12-07 13:54:21 · 263 阅读 · 0 评论 -
使用cn.hutool.http请求第三方数据
一:* 第三方授权* 得到第三方token和Expires(过期时间)说明:请求第三方数据时,需要授权。第三方会给到appid和secret,请求携带appid和secret获取一个token和expires,又了token就又了操作第三方数据的权限。每次操作第三方数据时就需要携带token。maven坐标 <dependency> <groupId>cn.hutool</groupId> &原创 2020-12-01 17:14:56 · 7092 阅读 · 0 评论 -
大哥了解一下Lambda表达式
1.什么是Lambda表达式?Lambda表达式是JDK1.8开始之后的新技术,是一种代码的新语法。是一种特殊写法,“核心目的是为了简化匿名内部类的代码写法”。2.Lambda表达式的格式:(匿名内部类被重写方法的形参列表) -> {被重写方法的方法体代码。}-> 就是一个新语法,没有实际含义,但是不能省略!3.Lambda表达式简化匿名内部类的前提:Lambda表达式并不是能简化所有匿名内部类代码的写法。Lambda表达式只能简化函数式接口的匿...原创 2020-09-28 00:41:28 · 8068 阅读 · 0 评论 -
ThreadPoolTaskScheduler 调度了延迟任务成功,在延迟时间内怎么取消呢?
ThreadPoolTaskScheduler配置线程池import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;@Configurationpublic class TaskSche.原创 2020-09-26 00:48:11 · 10825 阅读 · 0 评论 -
ThreadPoolTaskScheduler 定时延时任务
异步的延迟调度任务,如我要调度一个任务,但我调度这个任务需要延迟一定时间才会执行。下面请看表演配置ThreadPoolTaskSchedulerimport org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.scheduling.concurrent.ThreadPoolTaskSc.原创 2020-09-23 01:40:24 · 11560 阅读 · 0 评论 -
Spring Task定时任务的快速入门
Spring Task:Spring3.0以后自带的task,可以将它看成一个轻量级的Quartz,而且使用起来比Quartz简单许多@Scheduled注解在方法上定时使用,该注解标记的方法没有参数,也没有返回值。即使写了返回值,也会被忽略。@EnableScheduling 注解启动spring定时任务的能力,通常用在配置类上面该注解会使Spring 容器中所有bean中的@Scheduled注解起作用开始表演------------------------------.原创 2020-09-22 00:58:56 · 8734 阅读 · 0 评论 -
redis事件通知(notify-keyspace-events Ex)
Keyspace 通知使客户端可以通过订阅频道来接收那些以某种方式改动了 Redis 数据集的事件(触发某些事件后可以向指定的频道发送通知),该功能需Redis 版本大于 2.8。问题:设置了生存时间的Key,在过期时能不能有所提示? 如果能对过期key一个监听,如何对过期key进行一个回调处理?Key过期事件的Redis配置notify-keyspace-events Exnotify-keyspace-events 的参数为 “Ex”。x 代表了过期事件ok 重启re..原创 2020-09-16 00:12:29 · 34531 阅读 · 7 评论 -
spring获取配置文件的信息@Value && @@ConfigurationProperties(prefix=“hel“)
@Value方式yml配置文件ly: name: xiaoming password: 123456获取配置文件的class,NameProperties .classpackage com.example.config;import lombok.Data;import org.springframework.beans.factory.annotation.Value;import org.springframework.context.annotatio...原创 2020-09-14 01:16:52 · 8804 阅读 · 0 评论 -
RedisTemplate做队列,行进先出
@Test public void contextLoads() { redisTemplate.opsForList().leftPush("errorSchedule","v1"); redisTemplate.opsForList().leftPush("errorSchedule","v2"); redisTemplate.opsForList().leftPush("errorSchedule","v3"); Objec...原创 2020-09-04 14:20:41 · 10144 阅读 · 0 评论 -
BigDecimal的精确运算
*float和double类型,执行二进制浮点运算,数值范围上精确的近似计算,没有完全精确的结果,商业计算往往要求结果精确,这时候使BigDecimal。 *使用BigDecimal做处理,数据源是double类型要转化为Double.toString(),然后使用String类型的构造器来进行计算 。1.使用folat或者double计算,会丢失精度 System.out.println(0.2 + 0.1); System.out.println(0...原创 2020-06-29 10:41:43 · 5093 阅读 · 0 评论 -
springBoot测试类
package com.example.mapper.testDemo;import com.example.mapper.UserMapper;import org.junit.Test;import org.junit.runner.RunWith;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.test.context.junit4.SpringRunner.原创 2020-07-11 14:55:58 · 248 阅读 · 0 评论 -
spring @Bean注解放到方法上的两个特性。
spring @Bean注解放到方法上的两个特性。1自动执行当前方法,将方法返回值对象放到ioc容器中。2.方法中有参数,会在ioc中寻找同类型的参数注入到方法的参数中。原创 2020-07-04 21:41:13 · 1653 阅读 · 1 评论