Lombok

表哥侃侃Netty(2)——用Netty手写一个RPC框架

a 夏天 提交于 2020-08-19 23:28:27
在上篇初步介绍Netty的一些概念和执行流程后,接下来废话不多说,直接撸代码。先用Netty写一个RPC框架,实现远程过程调用,来推开Netty实用场景的大门。后续还会接上用Netty来实现聊天室、心跳机制以及用Netty手写一个雏形的Dubbo框架。 ** 手写RPC框架 ** RPC是远程过程调用的简写,是一个协议,处于网络通信协议的第五层:会话层,其下就是TCP/IP协议,建立在其基础上的通信会话协议。RPC定义了交互的模式,而应用程序使用这些模式,来访问其他服务器的方法,并不需要关系具体的网络上的细节。 RPC采用C/S模式。请求程序即客户机,而服务提供程序就是一个服务器。首先,客户端调用进程发送一个带有请求参数的调用信息到服务端,然后等待应答信息。在服务端,进程一直保持睡眠状态直到接收到调用信息为止。当一个调用信息到达,服务器根据请求参数进行计算,并将结果发送给发出请求的客户端,然后等待下一个调用信息。客户端调用进程接收到答复信息,获得调用结果,然后继续发出下一次调用。 废话不多说,就是干。 RPC框架说明: I.用户将业务接口通知到Server与Client,这里要注意的是***业务接口***也就是***服务名称***。 II. 用户只需将业务接口的实现类写入到Server端的指定包下,并且在server端对该包下的所有实现类进行发布。 III.

Spring Boot1学习之初识Spring Boot

若如初见. 提交于 2020-08-19 21:55:48
Spring Boot Spring Boot 是一个快速开发框架,可以迅速搭建出一套基于Spring框架体系的应用,是Spring Cloud的基础,Spring Boot开启了各种自动装配,从而简化了代码的开发,不需要编写各种配置文件,只要引入相关依赖就可以迅速搭建一个应用。 特点 不需要web.xml 不需要springmvc.xml 不需要tomcat,Spring Boot内嵌了tomcat 不需要配置JSON解析,支持REST架构 个性化的配置非常简单 如何使用 创建maven工程,导入相关依赖 1 <?xml version = "1.0" encoding = "UTF-8" ?> 2 <project xmlns = "http://maven.apache.org/POM/4.0.0" 3 xmlns: xsi = "http://www.w3.org/2001/XMLSchema-instance" 4 xsi: schemaLocation = "http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd " > 5 <modelVersion> 4.0.0 </modelVersion> 6 7 <groupId> com.wiggin </groupId> 8

搭建SpringCloud微服务框架:六、数据库持久层-SpringDataJPA

不羁的心 提交于 2020-08-19 16:25:00
搭建微服务框架(数据库持久层-SpringDataJPA) 用惯了Mybatis,这次来换换口味,在SQuid中集成SpringDataJPA。 本文源地址: 搭建微服务框架(数据库持久层-SpringDataJPA) Github地址: SQuid 介绍 以前都是听说过的是 HibernateJPA ,却从来没有使用过,一直在项目中使用的是 Mybatis 。 SpringDataJPA是基于Hibernate的底层封装的一套ORM框架,使用起来的第一感觉是代码量真的很少,相较传统的Mybatis来说,感觉最起码少了60%,当然大部分都是体现在xml文件上。 介绍真的没有太多词汇可以展示出来,下面来进行使用。👇 使用 在squid项目中,我们新建一个 squid-example-jpa 的项目(由于之前的example目录被删除,可以根据下面的层级目录来进行新建) 引入依赖: <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid-spring-boot

Spring Boot + Spring Security自定义用户认证

浪尽此生 提交于 2020-08-18 23:37:12
引入依赖: <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> 自定义认证过程 自定义认证的过程需要实现Spring Security提供的UserDetailService接口 ,源码如下: public interface UserDetailsService { UserDetails loadUserByUsername(String username) throws UsernameNotFoundException; } loadUserByUsername方法返回一个UserDetail对象

解决并发问题,数据库常用的两把锁!

旧城冷巷雨未停 提交于 2020-08-18 20:50:23
作者:黄青石 cnblogs.com/huangqingshi/p/10165409.html 在写入数据库的时候需要有锁,比如同时写入数据库的时候会出现丢数据,那么就需要锁机制。 数据锁分为乐观锁和悲观锁 它们使用的场景如下: 乐观锁适用于写少读多的情景,因为这种乐观锁相当于JAVA的CAS,所以多条数据同时过来的时候,不用等待,可以立即进行返回。 悲观锁适用于写多读少的情景,这种情况也相当于JAVA的 synchronized ,reentrantLock等,大量数据过来的时候,只有一条数据可以被写入,其他的数据需要等待。执行完成后下一条数据可以继续。 他们实现的方式上有所不同。 乐观锁采用版本号的方式,即当前版本号如果对应上了就可以写入数据,如果判断当前版本号不一致,那么就不会更新成功,比如 update table set column = value where version=${version} and otherKey = ${otherKey} 悲观锁实现的机制一般是在执行更新语句的时候采用for update方式,比如 update table set column='value' for update 这种情况where条件呢一定要涉及到数据库对应的索引字段,这样才会是行级锁,否则会是表锁,这样执行速度会变慢。 下面我就弄一个spring boot