目录
1.微服务
2.eureka
3.privode
4.consume
5.看板娘
正文
1.微服务
1.1 第一代服务框架
代表:Dubbo(Java)、Orleans(.Net)等
特点:和语言绑定紧密
1.2 第二代服务框架
代表:Spring Cloud等
现状:适合混合式开发(例如借助Steeltoe OSS可以让ASP.Net Core与Spring Cloud集成),正值当年
1.3 第三代服务框架
代表:Service Mesh(服务网格) => 例如Service Fabric、lstio、Linkerd、Conduit等
现状:在快速发展中,更新迭代比较快
首先,尽管Spring Cloud带有“Cloud”这个单词,但它并不是云计算解决方案,而是在Spring Boot基础之上构建的,用于快速构建分布式系统的通用模式的工具集。
其次,使用Spring Cloud开发的应用程序非常适合在Docker和PaaS(比如Pivotal Cloud Foundry)上部署,所以又叫做云原生应用(Cloud Native Application)。云原生可以简单地理解为面向云环境的软件架构。
总结 :Spring Cloud是一个基于Spring Boot实现的云原生应用开发工具,它为基于JVM的云原生应用开发中涉及的配置管理、服务发现、熔断器、智能路由、微代理、控制总线、分布式会话和集群状态管理等操作提供了一种简单的开发方式。
Spring Cloud具有如下特点:
约定大于配置
适用于各种环境
隐藏了组件的复杂性,并提供声明式、无XML式的配置方式
开箱即用,快速启动
组件丰富,功能齐全
2.eureka
eureka负责注册provider和consumer的服务信息
ZrEurekaApplication.class
@SpringBootApplication
@EnableEurekaServer
public class ZrEurekaApplication {
public static void main(String[] args) {
SpringApplication.run(ZrEurekaApplication.class, args);
}
}
application.yml
server:
port: 10086
eureka:
client:
service-url:
defaultZone: http://127.0.0.1:10086/eureka
spring:
application:
name: zr-eureka
3.privode
provider负责与数据库进行交互,实现数据持久化,并给consumer提供服务
UserController.class
@Controller
@RequestMapping("user")
public class UserController {
@Autowired
private UserService userService;
@ResponseBody
@RequestMapping("{id}")
public User findUser(@PathVariable("id") Long id){
User user = userService.findUserById(id);
return user;
}
}
4.consume
consumer与前端交互,通过与Eureka同源的feign组件调用provider提供的服务实现业务逻辑,给前端响应
UserController.class
@RestController
@RequestMapping("consumer/user")
public class UserController {
/* @Autowired
private RestTemplate restTemplate;
@Autowired
private DiscoveryClient discoveryClient;*/
@Autowired
private UserClient userClient;
@RequestMapping
public User queryById(@RequestParam("id") Long id){
//http://localhost:8081/user/1
// User user = restTemplate.getForObject("http://localhost:8081/user/" + id, User.class);
/* List<ServiceInstance> instances = discoveryClient.getInstances("ZR-PROVIDER");
ServiceInstance instance = instances.get(0);
String url="http://"+instance.getHost()+":"+instance.getPort()+"/user/"+id;
User user = restTemplate.getForObject(url, User.class);*/
User user=userClient.findUser(id);
return user;
}
}
5.看板娘
js代码
<script type="text/javascript" charset="utf-8" src="https://files.cnblogs.com/files/liuzhou1/L2Dwidget.0.min.js"></script>
<script type="text/javascript" charset="utf-8" src="https://files.cnblogs.com/files/liuzhou1/L2Dwidget.min.js"></script>
<script type="text/javascript">
L2Dwidget.init({"display": {
"superSample": 2,
"width": 200,
"height": 400,
"position": "right",
"hOffset": 0,
"vOffset": 0
}
});
</script>
css代码
<style type="text/css">
#live2dcanvas {
border: 0 !important;
}
</style>
效果(右下角)