DotNet Core微服务本地无云POC开发部署新手入门问题咨询
以下针对你提出的5个具体问题逐一给出可落地的实操结论:
1. 微服务项目结构选型
选择第二种方案:同一个解决方案下创建4个独立的API项目即可。
POC阶段无需拆分多个.sln解决方案,单sln下管理多个微服务项目更方便本地批量编译、联合调试,后续如果服务迭代到正式生产、团队拆分维护,再拆成独立sln也没有额外迁移成本。
2. RabbitMQ通信相关项目与部署方案
不需要单独为通信逻辑创建独立的类库解决方案,你可以在当前解决方案内新建一个公共类库项目,封装RabbitMQ连接、消息发布/订阅的通用方法,供4个微服务直接引用即可。
RabbitMQ本身直接使用官方Docker镜像运行即可,无需自行打包定制镜像,本地调试推荐拉取rabbitmq:3-management镜像,自带web管理页面可直观查看消息队列运行状态。
3. Docker打包规则
选择第二种方案:4个微服务分别打包为独立容器。
单容器运行单进程是Docker的标准最佳实践,也完全匹配微服务独立部署的核心原则,后续你需要更新单个服务、扩容特定服务时都不会影响其他服务运行。打包时每个微服务单独编写Dockerfile即可,Visual Studio 2019自带Docker支持功能可一键生成适配.NET Core的Dockerfile。
4. 异步通信的实现主体
异步通信逻辑由微服务自身实现,容器仅提供服务运行的隔离环境。你可以将容器理解为轻量化的独立虚拟机,运行在容器内的微服务和其他容器内的服务、RabbitMQ容器的通信逻辑,和你直接在本地启动多个进程通信的逻辑完全一致,不需要额外开发容器层面的交互代码。
5. 本地Docker Swarm编排可行性
完全可以在本地实现Docker Swarm编排。Docker Desktop默认自带Swarm模式,你只需在终端执行docker swarm init命令即可一键开启本地单节点Swarm集群,后续编写docker-compose.yml编排配置文件,再执行docker stack deploy命令就能一键启动所有微服务、RabbitMQ、数据库等依赖组件,全程无需依赖任何云服务。
补充POC落地优化建议
- 每个微服务可对应一个独立的数据库Docker容器,推荐使用SqlServer Express或PostgreSQL官方镜像,无需在本地安装数据库,环境一致性更高
- 功能调试阶段可不用每次打包容器,直接用Visual Studio启动多个微服务项目本地调试,业务流程跑通后再做容器化部署验证,提升开发效率
- Ocelot网关可在POC后期再引入,先跑通4个核心服务的通信、业务主流程,再叠加网关组件,降低初期调试复杂度
内容的提问来源于stack exchange,提问作者Manish Kumar

