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[]数组中


总结

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

相关推荐
狼与自由7 小时前
微服务网关演化
微服务·云原生·架构
喵个咪10 小时前
Kratos + WebRTC 实战:实现浏览器 P2P 音视频通话与实时数据通信
后端·微服务·webrtc
jasnet_u11 小时前
SpringMVC 请求处理深度解析:从 DispatcherServlet 到视图渲染
spring·springmvc·springboot
喵个咪12 小时前
Kratos KCP 传输中间件:游戏开发低延迟网络通信实战指南
后端·微服务·游戏开发
喵个咪12 小时前
Kratos 生态双定时器中间件:高精度 hptimer 与标准 cron 选型与实践
后端·微服务·go
格鸰爱童话12 小时前
springboot3.2使用neo4j
springboot·neo4j
不是光头 强1 天前
Spring Boot 多线程场景下 i18n 国际化失效问题排查与解决
java·开发语言·springboot
YuanDaima20481 天前
Docker 核心架构与底层技术原理解析
运维·人工智能·docker·微服务·容器·架构·个人开发
零壹AI实验室1 天前
云原生微服务踩坑记:187个服务降到23个,故障率降低90%
微服务·云原生·架构
LT10157974441 天前
2026年微服务性能测试平台选型指南:分布式架构适配与服务联动测试
分布式·微服务·架构