RabbitMQ 小项目之扫盲班

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录


前言

学习rabbitmq时发现很多注解看不懂,需要特地去查,于是在这里总结相关注解和其他应该会的。

做项目还没有做完,也写一些不懂的。


一、注解类

@FeignClient(value = "business")

springcloudAlibaba的openfeign接口,value填在springcloud中注册的服务,下面的接口方法则是需要调用的接口方法。

@Configuration

配置类需要的注解,像RedisTemplate、RabbitmqTemplate都需要这个注解

@Bean

将配置类的方法的返回值创建为spring容器中的bean,一般与@Configuration配合使用。

注: @Autowired是申请已存在的对象;@Component是加在类上,声明不属于@Service, @Repository, @Controller的组件

@Slf4j

可以调用log.info及其他日志方法,加在类上

@Autowired

将spring容器中的bean注入

@RestController、@Controller + @ResponseBody

目前我发现区别在于返回值是字符串时,两者都可以正常显示;但是如果单独的@Controller没有编写前端页面,返回字符串就会显示空页。

java 复制代码
 @GetMapping("/po")
    public String po(){
        long start = System.currentTimeMillis();
        //1、调用库存服务扣除商品库存
        itemStockClient.decr();
        //2、调用订单服务,创建订单
        orderManageClient.create();
        System.out.println(end - start);
        return "place order is ok!";
    }

@GetMapping("/po")

接受对应的请求

@Mapper与@MapperScan(basePackages = "")

mapper接口上应该有@Mapper注解,或者在启动类上表明注解@MapperScan(basePackages = ""),写明mapper包所在位置

@SpringBootApplication

springboot的启动类

@EnableDiscoveryClient

nacos服务的注册,也在启动类上

@EnableFeignClients

openfeign中要调用其他服务的启动类上声明,被调用的不用声明

@RabbitListener(queues = )

标记一个方法作为消息监听器,当有消息到达指定队列时自动调用该方法

@Select、@Insert、@Update

mapper.xml的简略模式,直接把sql语句写在mapper接口中

@Transactional

spring中保证数据操作的ACID,全成功或者全部失败

@Resource

按名称或类型注入,比@Autowired更丰富一些,默认按名称注入。

@JsonFormat(pattern = "")

限制日期的格式,序列化与反序列化

@NotNull

字段不能为空

@DateTimeFormat(pattern = "")

前端传表单,用这个规定时间格式

@PathVariable(value="")

方法要从浏览器获得的请求参数

@Value

将配置的值注入管理的bean中

@RefreshScope

动态刷新配置,无需重启

@RequestMapping

Controller中类路径的地址

@Getter

Lombok中的方法,自动生产getter方法

@Data

自动生成所有字段的getter、setter、toString、equals、hashCode方法

@NotBlank(message ="")

验证字符串不能为null、不能为空字符串、不能只包含空白字符

@Range(min = , max = ,message = "")

限制数值的范围

@NoArgsConstructor、@AllArgsConstructor

无参构造和全参构造

@RequestBody

把请求体中的JSON/XML数据转换为Java对象

@RequestParam

是一个可选的参数,得到URL?后的参数并赋值给方法处理

二、独特写法

采用策略模式和责任链相结合:

写一个filter接口用作父接口,并定义一个方法:

java 复制代码
public interface CheckFliter {
    void check(StandardSubmit submit);
}

spring中 private Map<String, CheckFliter> checkFliterMap会自动得到接口的所有实现类。@Value会得到配置中filters的值,通过for循环自动执行每个filter中存在实现类的.check()方法,实现责任链,策略模式通过配置中注值来实现

java 复制代码
@Component
@RefreshScope
public class CheckFilterContext {
    @Autowired
    private Map<String, CheckFliter> checkFliterMap;//自动得到所有实现类

    @Value("${filters:apikey,ip,sign,template,mobile,fee}")
    private String filters;

    public void check(StandardSubmit submit) {
        String[] filterArray = filters.split(",");
        for (String filter : filterArray) {
            CheckFliter checkFliter = checkFliterMap.get(filter);
            checkFliter.check(submit);
        }
    }
}

每个具体的实现类,都有独特的实现方法

java 复制代码
@Service(value = "apikey")
@Slf4j
public class ApiKeyCheckFilter implements CheckFliter {

    @Autowired
    private BeaconCacheClient beaconCacheClient;

    @Override
    public void check(StandardSubmit submit) {
        log.info("接口模块-校验apikey");
        Map clientBusiness=beaconCacheClient.hGetAll(CacheConstant.CLIENT_BUSINESS+submit.getApikey());

        if (clientBusiness == null || clientBusiness.size() == 0){
            log.info("【接口模块-校验apikey】 非法的apikey="+submit.getApikey());
            throw new ApiException(ExceptionEnums.ERROR_APIKEY);
        }

        submit.setClientId(Long.parseLong(clientBusiness.get("id")+""));
        log.info("【接口模块-校验apikey】 查询到用户信息 clientBusiness={}",clientBusiness);
    }
}

2.java8的某个语法糖

java 复制代码
void sadd(@PathVariable(value = "key")String key, @RequestBody Map<String,Object>... maps);

可以接收0个或多个Map,放在一个List[]数组中


总结

写了一部分,项目写完了再来补充

相关推荐
大猫和小黄1 小时前
若依微服务Cloud中Quartz-Job模块适配OpenGauss数据库
数据库·微服务·opengauss·quartz·定时任务·若依·job
用户3521802454752 小时前
🎉Spring Boot 3 + 多数据源 + Druid:监控页面 + 控制台 SQL 日志,终于搞定啦!
spring boot·微服务
xiaoshujiaa3 小时前
Java大厂面试实录:谢飞机硬刚互联网医疗微服务架构,Spring Cloud+Redis+Kafka全踩坑
spring boot·redis·微服务·kafka·flyway·java面试·互联网医疗
九月生3 小时前
基于 Sa-Token 实现 API 接口签名校验(Spring Boot 3 实战)
web安全·springboot
xiaoshujiaa3 小时前
微服务与大数据场景下的Java面试实录:从Spring Cloud到Flink的层层拷问
大数据·spring cloud·微服务·flink·kubernetes·java面试·resilience4j
s1mple“”6 小时前
互联网大厂Java面试实录:Spring Boot+微服务+AI技术栈深度问答
spring boot·微服务·java面试·ai技术·互联网大厂
s1mple“”6 小时前
基于电商场景的Java全栈面试实录:Spring Boot+微服务+AI技术深度解析
java·spring boot·微服务·高并发·分布式架构·电商系统·ai技术
黄俊懿21 小时前
【深入理解SpringCloud微服务】Spring-Security作用与原理解析
java·后端·安全·spring·spring cloud·微服务·架构师
码界奇点1 天前
基于微服务架构的企业身份与访问管理系统设计与实现
微服务·云原生·架构·车载系统·毕业设计·源代码管理
遥远_1 天前
一次高并发压垮系统的排查与重生(上)
java·微服务·性能优化·高并发·限流·qps