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


总结

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

相关推荐
是垚不是土9 分钟前
轻量化CICD落地:基于Jenkins与Supervisor的中小企业服务发布实践
运维·servlet·ci/cd·微服务·jenkins
拾忆,想起1 小时前
Dubbo动态服务发现配置指南:从基础到云原生实践
服务器·网络·微服务·云原生·架构·服务发现·dubbo
她说..2 小时前
Java AOP完全指南:从原理到实战(全套知识点+场景总结)
java·开发语言·spring·java-ee·springboot
GEM的左耳返3 小时前
Java面试实战:从Spring Boot到AI集成的技术深度挑战
spring boot·redis·微服务·kafka·java面试·spring ai·缓存优化
Hernon3 小时前
微服务架构设计:从零打造互联网车贷系统 —— 业务背景与架构蓝图
java·微服务·架构·微服务架构设计
千寻技术帮4 小时前
10414_基于SpringBoot的家乡农产品销售平台
源码·springboot·商城·文档·农产品
一 乐4 小时前
数码商城系统|电子|基于SprinBoot+vue的数码商城系统(源码+数据库+文档)
java·前端·javascript·数据库·vue.js·springboot
小毅&Nora5 小时前
【微服务】【部署】 ② 优雅停机 - 从“关门打烊“到“无缝交接“的实战指南
微服务·云原生·架构
梁萌5 小时前
微服务任务调度XXL-JOB实战(docker)
docker·微服务·xxl-job·定时任务
he___H6 小时前
RabbitMQ使用
rabbitmq·springboot