一.微服务架构
1.微服务是一种架构风格,没有准确的定义
简单来说,微服务架构风格是一种将一个单一应用程序开发为一组小型服务的方法,每个服务运行在自己的进程中,服务间通信采用轻量级通信机制(通常用HTTP资源API)。这些服务围绕业务能力构建并且可通过全自动部署机制独立部署,这些服务共用一个最小型的集中式的管理,服务可用不同的语言开发,使用不同的数据存储技术
1. All in One -> 微服务架构
将一个完整的项目,一般是根据业务模块拆分成多个项目,并且运行在一个独立的tomcat或其他容器中
2. 每一个独立的容器都需要相互通讯
基于HTTP的RestFul方式 : spring cloud
基于RPC方式 : Dubbo
3. 服务之间是需要一个统一的管理
dubbo: zookeeper
springcloud: eureka
4.可以采用不同的语言开发
springcloud采用基于HTTP的restful方式
5.甚至每一个独立的服务都可以有一个自己的独立的数据库
2.微服务
从单一项目中拆分出来的某一个模块就成为一个微服务
3.springcloud
微服务架构落地实现的技术栈,大多数都是基于国外的Netflix公司的技术实现
springcloud让微服务架构的实现变得更简单
二.介绍SpringCloud
1.微服务是一种架构风格,没有准确的定义
简单来说,微服务架构风格是一种将一个单一应用程序开发为一组小型服务的方法,每个服务运行在自己的进程中,服务间通信采用轻量级通信机制(通常用HTTP资源API)。这些服务围绕业务能力构建并且可通过全自动部署机制独立部署,这些服务共用一个最小型的集中式的管理,服务可用不同的语言开发,使用不同的数据存储技术
1. All in One -> 微服务架构
将一个完整的项目,一般是根据业务模块拆分成多个项目,并且运行在一个独立的tomcat或其他容器中
2. 每一个独立的容器都需要相互通讯
基于HTTP的RestFul方式 : spring cloud
基于RPC方式 : Dubbo
3. 服务之间是需要一个统一的管理
dubbo: zookeeper
springcloud: eureka
4.可以采用不同的语言开发
springcloud采用基于HTTP的restful方式
5.甚至每一个独立的服务都可以有一个自己的独立的数据库
2.微服务
从单一项目中拆分出来的某一个模块就成为一个微服务
3.springcloud
微服务架构落地实现的技术栈,大多数都是基于国外的Netflix公司的技术实现
springcloud让微服务架构的实现变得更简单
三.微服务场景模拟
首先我们需要模拟一个服务调用的场景。方便后面学习微服务架构
1.1.服务提供者
新建一个项目,对外提供查询用户的服务
1.创建服务者工程
2.导入依赖
<!--下面导入数据库的使用的包-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<!--mybatis-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.1</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.6</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
3.编写代码
实体类:
@Data
public class User implements Serializable {
private static final long serialVersionUID = -1799135712388434175L;
private int id;
private String username;
private String password;
private int age;
private int sex;
private String birthday;
private String created;
private String updated;
private String note;
}
controller
@RestController
public class UserController {
@Autowired
private IUserService userService;
@RequestMapping("/list")
public List<User> getList(){
return userService.queryUsers();
}
}
service接口
public interface IUserService {
List<User> queryUsers();
}
实现类
@Service
public class UserService implements IUserService {
@Autowired
private UserMapper userMapper;
@Override
public List<User> queryUsers() {
return userMapper.queryUsers();
}
}
mapper接口
@Mapper
public interface UserMapper {
List<User> queryUsers();
}
mapper映射文件这里就没写了,里面只需写个简单的sql
yml配置文件
server:
port: 8181
mybatis:
type-aliases-package: com.qf.pojo
mapper-locations: classpath:mapper/*.xml
spring:
datasource:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql:///nz1904-sbc-01
username: root
password: 123
启动项目,访问并测试
1.2.服务调用者
和上面的一样,先创建个工程,这里只需订阅服务,所有就简单多了
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId>
<version>3.9.0</version>
</dependency>
config配置
@SpringBootConfiguration
public class RestTemplateConfig {
@Bean
public RestTemplate restTemplate(){
return new RestTemplate(new OkHttp3ClientHttpRequestFactory());
}
}
controller
@RestController
public class ConsumerController {
@Autowired
private RestTemplate restTemplate;
@RequestMapping("/test")
public List<User> consumerTest(){
//url:协议 ip 端口 请求
String url = "http://127.0.0.1:8181/list";
return this.restTemplate.getForObject(url,List.class);
}
}
启动并测试订阅服务能否成功
localhost:8080/test