
作者:小傅哥 博客:https://bugstack.cn
❝沉淀、分享、成长,让自己和他人都能有所收获!😜 ❞
大家好,我是技术UP主小傅哥。
在过往几年中在帮助大家学习编程中,我会看到不少新人伙伴在项目的时候会纠结,这个是RPC(Dubbo)的、这个是 SpringCloud(Feign)的,这个是 MVC 的、这个是 DDD 的。但其实不用纠结一点都。
其实这些东西都是一通百通
一个能把 Dubbo 用的透彻的人,换成 Feign 就是小儿科。一个能把 MVC 搞的明明白白的人,换成 DDD 那就是手到擒来。之所以有人会觉得换一下就不会了,是因为原本另外一个就没用明白。各类的工具、框架、组件,在编程中都有非常多的同类替代品。就算即使是 RPC 也是有非常多的产品,尤其中大厂中还有很多自研的组件。
那么今天小傅哥就再分享下 SpringCloud Feign 结合到 DDD 战术设计六边形架构中的使用方式。
官网:https://spring.io/projects/spring-cloud
Spring Cloud 为开发人员提供了一系列工具,用于快速构建分布式系统中的一些常见模式(例如配置管理、服务发现、断路器、智能路由、微代理、控制总线、微服务和契约测试)。分布式系统的协调产生了样板模式,使用 Spring Cloud,开发人员可以快速建立实现这些模式的服务和应用程序。它们可以在任何分布式环境中很好地工作,包括开发人员自己的笔记本电脑、裸机数据中心和 Cloud Foundry 等托管平台。
本节会涉及到 Eureka 注册中心、Feign 简化微服务 HTTP 调用组件;

小傅哥这里给搭建了一套测试 Feign 案例的六边形系统架构;

工程:https://github.com/fuzhengwei/xfg-dev-tech-springcloud-feign
更多的关于 DDD 六边形架构,可以从编程路书中学习;https://bugstack.cn/md/road-map/ddd-guide-03.html
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.6.RELEASE</version>
<relativePath/>
</parent>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Finchley.SR2</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>2.0.28</version>
</dependency>
</dependencies>
</dependencyManagement>
在公司中 eureka-server 是统一一套的,我们个人学习需要搭建一个这样的工程。
server:
port: 7397
eureka:
instance:
hostname: localhost
client:
registerWithEureka: false
fetchRegistry: false
serviceUrl:
defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
spring:
application:
name: eureka-server
package cn.bugstack.xfg.dev.tech;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
@SpringBootApplication
@EnableEurekaServer
public class EurekaServerApplication {
public static void main(String[] args) {
SpringApplication.run( EurekaServerApplication.class, args );
}
}
server:
port: 8002
spring:
application:
name: eureka-client-api
eureka:
client:
serviceUrl:
defaultZone: http://localhost:7397/eureka/
@EnableEurekaClient
@RestController
public class TestApiController {
@Value("${server.port}")
private int port;
@RequestMapping(path = "/api/queryUserInfo", method = RequestMethod.GET)
public String queryUserInfo(@RequestParam String userId) {
return "Hi 小傅哥,微信公众号:bugstack虫洞栈 | " + userId + " >: from eureka client port: " + port;
}
}
@EnableEurekaClient 注解。这样这个接口就可以被 eureka 注册中心管理。在工程的基础设置层配置对外部的接口调用;

@GET("cgi-bin/token")
Call<WeixinTokenRes> getToken(@Query("grant_type") String grantType,
@Query("appid") String appId,
@Query("secret") String appSecret);



fuzhengwei@MacBook-Pro xfg-dev-tech-springcloud-feign % curl http://127.0.0.1:8091/api/v1/query_user_info
Hi 小傅哥,微信公众号:bugstack虫洞栈 | xfg >: from eureka client port: 8002%
]}ServerList:org.springframework.cloud.netflix.ribbon.eureka.DomainExtractingServerList@680aded0
24-11-24.10:32:49.968 [PollingServerListUpdater-0] INFO ChainedDynamicProperty - Flipping property: eureka-client-api.ribbon.ActiveConnectionsLimit to use NEXT property: niws.loadbalancer.availabilityFilteringRule.activeConnectionsLimit = 2147483647
http://127.0.0.1:8091/api/v1/query_user_info- END -
加入小傅哥的星球「码农会锁」,💐斩获大厂Offer!阅读500+份简历和评审,学习6个业务项目;MVC+DDD,双架构开发小型电商、大营销(超级大课)、OpenAI 大模型应用、Lottery、IM、AI 问答助手。7个组件项目;OpenAI 代码评审、BCP 透视业务监控、动态线程池、支付SDK设计和开发、API网关、SpringBoot Starter、IDEA Plugin 插件开发。1套源码课程、1套基础教程、1到云服务器教程以及各类场景解决方案。
小傅哥有那么多课程内容,我加入后都可以学习吗?可以!
好啦,这就是小傅哥的技术列车🚌,嘎嘎实惠!🤔 几乎没有哪个大厂架构师,用这么一个普惠的价格手把手的教大家学习了。
星球「码农会锁」- 加入后从课程入口进入项目学习
星球全程手把手指导教学,遇到技术问题帮忙排查代码。已经有很多伙伴开始学起来了,还有大家交的作业笔记。有了的项目驱动学习,清晰的目标感,大家冲起来也有了更明确的方向!干干干!!!