Microservices Event Sourcing 是一个微服务架构的在线购物网站,使用Spring Boot、Spring Cloud、Spring Reactor、OAuth2、CQRS 构建,实现了基于Event Sourcing的最终一致性,提供了构建端到端微服务的最佳实践
APACHE-2.0 License
Microservices Event Sourcing 是一个微服务架构的在线购物平台,使用Spring Boot、Spring Cloud、Spring Reactor、OAuth2、CQRS 构建,实现了基于Event Sourcing的最终一致性,提供了构建端到端微服务的最佳实践。
微服务是最近几年很流行的一种架构模式,相比其他架构模式有着诸多优点。如:
微服务不是银弹,它也有着自己的缺点:
业界对于微服务开发已经有了一套实践模式,如:
这些微服务模式中的大多数都已经被Spring Cloud(套件)所实现,且开箱即用。但有一些需要经过一番努力才能够实现,如基于事件源实现最终一致性,命令查询职责分离(CQRS),消息驱动的微服务。而这些模式对于微服务能否成功落地至关重要。因此,Microservices Event Sourcing项目在提供构建端到端微服务的最佳实践的同时,主要关注于基于事件源实现最终一致性。我将在接下来分别构建基于CQRS的微服务,和消息驱动的微服务。
整个系统分为三层:
包含以下微服务.:
微服务架构通常使用多个数据库。业务领域的资源分布在整个微服务架构中,每个微服务有它单独的数据库。开发团队通常根据数据库在解决特定问题时其优势选择合适类型的数据库。
Microservices Event Sourcing使用以下数据库类型.
即使是同种类型的数据库,每个服务也应该使用单独的数据库,这是微服务的基本模式之一,能够避免引起数据库层面的耦合,也易于维护、扩展、伸缩.
1、分别为user-service、account-service、catalog-service、shopping-cart-service创建单独的mysql数据库与用户
CREATE DATABASE time_store_user CHARACTER SET utf8 COLLATE utf8_general_ci;
grant all privileges on time_store_user.* to 'time'@'localhost' identified by '123456';
grant all privileges on time_store_user.* to 'time'@'127.0.0.1' identified by '123456';
grant all privileges on time_store_user.* to 'time'@'::1' identified by '123456';
flush privileges;
CREATE DATABASE time_store_account CHARACTER SET utf8 COLLATE utf8_general_ci;
grant all privileges on time_store_account.* to 'time'@'localhost' identified by '123456';
grant all privileges on time_store_account.* to 'time'@'127.0.0.1' identified by '123456';
grant all privileges on time_store_account.* to 'time'@'::1' identified by '123456';
flush privileges;
CREATE DATABASE time_store_catalog CHARACTER SET utf8 COLLATE utf8_general_ci;
grant all privileges on time_store_catalog.* to 'time'@'localhost' identified by '123456';
grant all privileges on time_store_catalog.* to 'time'@'127.0.0.1' identified by '123456';
grant all privileges on time_store_catalog.* to 'time'@'::1' identified by '123456';
flush privileges;
CREATE DATABASE time_store_cart CHARACTER SET utf8 COLLATE utf8_general_ci;
grant all privileges on time_store_cart.* to 'time'@'localhost' identified by '123456';
grant all privileges on time_store_cart.* to 'time'@'127.0.0.1' identified by '123456';
grant all privileges on time_store_cart.* to 'time'@'::1' identified by '123456';
flush privileges;
2、为inventory-service安装neo4j 2.3,启动neo4j并修改密码为secret
curl -v -u neo4j:neo4j -X POST localhost:7474/user/neo4j/password -H "Content-type:application/json" -d "{\"password\":\"secret\"}"
3、为order-service安装mongo。在 localhost:27017上启动mongo
4、依次启动以下微服务
为了节省内存,以下服务可以不启动,它们对于业务开发没有很大影响
当所有服务启动完成后,验证服务已经成功注册到Eureka。
如果每个服务成功加载,浏览在线购物网站首页。点击登录,你将被重定向到Oauth2.0授权服务器,即user-service。用户名是 user,密码是 password。你将被认证和请求允许对在线购物网站进行令牌授权。在完成授权后,你将被重定向到在线购物网站,然后便可以访问来自边缘服务的受保护资源。
This project is licensed under Apache License 2.0.