- nslookup 域名(www.baidu.com) 查看域名
微服务的概念?
将all in one 和 soa 框架的缺点都弥补了的框架结构
微服务是一种架构风格,一个大型复杂软件应用由一个或多个微服务组成。系统中的各个微服务可被独立部署,各个微服务之间是松耦合的。每个微服务仅关注于完成一件任务并很好地完成该任务。在所有情况下,每个任务代表着一个小的业务能力。
服务间可以通过“轻量级设备与HTTP型API进行沟通”
服务之间可以通过注册中心来注册和发现
微服务框架对比!
consul:是google开源的一个使用go语言开发的服务发现、配置管理中心服务。内置了服务注册与发现框 架、分布一致性协议实现、健康检查、Key/Value存储、多数据中心方案,不再需要依赖其他工具(比如ZooKeeper等)。服务部署简单
etcd:是一个高可用的键值存储系统 由CoreOS开发并维护的, 主要用于共享配置和服务发现
dubbo:是 阿里巴巴公司开源的一个高性能优秀的服务框架,使得应用可通过高性能的 RPC 实现服务的输出和输入功能,可以和 Spring框架无缝集成。提供中文文档,更新不稳定
Springcloud:是一个基于Spring Boot实现的云应用开发工具,它为基于JVM的云应用开发中的配置管理、服务发现、断路器、智能路由、微代理、控制总线、全局锁、决策竞选、分布式会话和集群状态管理等操作提供了一种简单的开发方式。
服务发现
微服务的核心灵魂
springcloud组件
实现简单的用户微服务案例(zookepper,consul,eureka【默认】)
首先用idea新建一个maven项目
关联依赖 注意这里容易出现版本冲突问题,版本要先选好
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.17.RELEASE</version>
</parent>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Edgware.SR2</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
控制中心模块创建
依赖管理
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
</dependencies>
main方法
@SpringBootApplication
@EnableEurekaServer
public class Application {
public static void main(String[] args) {
new SpringApplicationBuilder(Application.class).web(true).run(args);
}
}
资源source建议写application.yml .,层次结构要分明:后面加个空格
server:
port: 8761
eureka:
instance:
#将来注册到该注册中心的微服务包括注册中心都是用IP地址
preferIpAddress: true
hostname: localhost
client:
#是否注册到注册中心,注册中心不需要自己注册
registerWithEureka: false
#是否从注册中心抓取注册信息,自己不需要抓取
fetchRegistry: false
serviceUrl:
defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
然后可以运行,输入localhost:8761进入微服务控制中心
成功进入页面
微服务用户创建
@SpringBootApplication
@EnableEurekaClient
@RestController
public class Application {
@RequestMapping("/")
public String home() {
return "Hello world";
}
public static void main(String[] args) {
new SpringApplicationBuilder(Application.class).web(true).run(args);
}
}
配置文件application.yml
server:
port: 8881
eureka:
client:
serviceUrl:
defaultZone: http://localhost:8761/eureka/
spring:
application:
#不要出现下划线
name: userservice
datasource:
url: jdbc:mysql://localhost/unit02
username: root
password: ps123456
driver-class-name: com.mysql.jdbc.Driver
pom.xml 依赖管理
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.2</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.20</version>
<scope>provided</scope>
</dependency>
</dependencies>
根据架构写一个用户登录的service层
先看controller层
@RestController
public class UserController {
@Autowired
UserMapper userMapper;
@PostMapping("/validataUser")
public Result validataUser(@RequestBody User user){
List<User> query = userMapper.query(user.getUsername(), user.getPassword());
Result result=new Result();
System.out.println(query.size());
if(query.size()>0){
result.setCode(1);
result.setMsg("请输入正确的账号和密码");
}
return result;
}
}
结果集实现,这里的实现统一用了lombok小辣椒配件
idea的安装流程https://mp.csdn.net/mdeditor/84666851#
@Data
@NoArgsConstructor
public class Result {
private int code;
private String msg;
private List data;
}
实体类user
```java
@Data
@NoArgsConstructor
public class User {
private String username;
private String password;
}
mapper接口映射
@Mapper
public interface UserMapper {
@Select("select * from user where username=#{username} and password=#{password}")
public List<User> query(@Param("username") String userName, @Param("password") String password);
}
然后在进入控制中心
这样一个微服务就创建成功啦
在创建一个视图层的微服务登录, 仅做参考
流程和上面的微服务差不多
这里的entity复制过来就好
@Controller
public class UserController {
@Autowired
RestTemplate restTemplate;
@RequestMapping(value="/rlogin",method=RequestMethod.POST)
public String rlogin(User user){
String url="http://USERSERVICE/validataUser";
ResponseEntity<Result> resultResponseEntity = restTemplate.postForEntity(url, user, Result.class);
Result body = resultResponseEntity.getBody();
System.out.println(body.getCode());
return body.getCode()==1 ? "redirect:/suc.html" : "redirect:/login.html";
}
}
发现什么不一样了吗?对的,不需要webapp这个文件了,所有的html文件一定要放在这里,包名可以选择用static或者public,建议用static,不然会扫描不到哦
application.yml
server:
#建议用80端口,我这是占用了,就随便取了一个
port: 8889
eureka:
instance:
#将来注册到该注册中心的微服务包括注册中心都是用IP地址
preferIpAddress: true
client:
serviceUrl:
defaultZone: http://localhost:8761/eureka/
#是否注册到注册中心,注册中心不需要自己注册
registerWithEureka: true
#是否从注册中心抓取注册信息,自己不需要抓取
fetchRegistry: true
spring:
application:
#不要出现下划线
name: userview
两个html就不写了,一个就写个form表单提交,一个就提示一句登录成功就好啦