From af675241aa880aa66faf404a47506ee1b60adc52 Mon Sep 17 00:00:00 2001 From: GuangJie1 Date: Wed, 2 Jul 2025 17:28:13 +0800 Subject: [PATCH] add spring cloud readme --- Others/spring-cloud/README.md | 93 +++++++++++++++++++++++ Others/spring-cloud/doc/image-info.yml | 93 +++++++++++++++++++++++ Others/spring-cloud/doc/picture/logo.png | Bin 0 -> 33298 bytes 3 files changed, 186 insertions(+) create mode 100644 Others/spring-cloud/README.md create mode 100644 Others/spring-cloud/doc/image-info.yml create mode 100644 Others/spring-cloud/doc/picture/logo.png diff --git a/Others/spring-cloud/README.md b/Others/spring-cloud/README.md new file mode 100644 index 00000000..2f4c1507 --- /dev/null +++ b/Others/spring-cloud/README.md @@ -0,0 +1,93 @@ +# Quick reference + +- The official Spring Cloud docker image. + +- Maintained by: [openEuler CloudNative SIG](https://gitee.com/openeuler/cloudnative). + +- Where to get help: [openEuler CloudNative SIG](https://gitee.com/openeuler/cloudnative), [openEuler](https://gitee.com/openeuler/community). + +# Spring Cloud | openEuler +Current Spring Cloud docker images are built on the [openEuler](https://repo.openeuler.org/). This repository is free to use and exempted from per-user rate limits. + +Spring Cloud provides tools for developers to quickly build some of the common patterns in distributed systems (e.g. configuration management, service discovery, circuit breakers, intelligent routing, micro-proxy, control bus, short lived microservices and contract testing). Coordination of distributed systems leads to boiler plate patterns, and using Spring Cloud developers can quickly stand up services and applications that implement those patterns. They will work well in any distributed environment, including the developer’s own laptop, bare metal data centres, and managed platforms such as Cloud Foundry. + +Learn more on [Spring Cloud Website](https://spring.io/projects/spring-cloud)⁠. + +# Supported tags and respective Dockerfile links +The tag of each `spring-cloud` docker image is consist of the version of `spring-cloud` and the version of basic image. The details are as follows + +| Tag | Currently | Architectures | +|---------------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------|---------------| +| [4.3.0-oe2403sp1](https://gitee.com/openeuler/openeuler-docker-images/blob/master/Others/spring-cloud/4.3.0/24.03-lts-sp1/Dockerfile) | Spring Cloud 4.3.0 on openEuler 24.03-LTS-SP1 | amd64, arm64 | + +# Usage +In this usage, users can select the corresponding `{Tag}` based on their requirements. + +- Pull the `openeuler/spring-cloud` image from docker + + ``` + docker pull openeuler/spring-cloud:{Tag} + ``` + +- Spring Cloud Netflix Eureka Client Starter Example + + When you use: + ``` + + org.springframework.cloud + spring-cloud-starter-netflix-eureka-client + + ``` + this starter pulls in: + * `spring-cloud-commons` + * `spring-cloud-netflix-eureka-client` + + The Netflix Eureka Client implements interfaces defined in spring-cloud-commons: + + | Abstraction (`spring-cloud-commons`) | Eureka Implementation (`spring-cloud-netflix-eureka-client`) | + |--------------------------------------|--------------------------------------------------------------| + | `DiscoveryClient` | `EurekaDiscoveryClient` | + | `ServiceInstance` | `EurekaServiceInstance` | + | `ServiceRegistry` | `EurekaServiceRegistry` | + | `AutoServiceRegistration` | `EurekaAutoServiceRegistration` | + | `HealthIndicator` | `EurekaHealthIndicator` | + + +- Example code + + ``` + @SpringBootApplication + @EnableDiscoveryClient // enables DiscoveryClient from spring-cloud-commons + public class MyApp { + public static void main(String[] args) { + SpringApplication.run(MyApp.class, args); + } + } + + @RestController + public class HelloController { + + @Autowired + private DiscoveryClient discoveryClient; // spring-cloud-commons + + @Autowired + private RestTemplate restTemplate; + + @Bean + @LoadBalanced // spring-cloud-commons + public RestTemplate restTemplate() { + return new RestTemplate(); + } + + @GetMapping("/call") + public String callUserService() { + // Uses EurekaDiscoveryClient under the hood + List instances = discoveryClient.getInstances("user-service"); + // Uses load balancer + Eureka for client-side discovery + return restTemplate.getForObject("http://user-service/hello", String.class); + } + } + ``` + +# Question and answering +If you have any questions or want to use some special features, please submit an issue or a pull request on [openeuler-docker-images](https://gitee.com/openeuler/openeuler-docker-images). \ No newline at end of file diff --git a/Others/spring-cloud/doc/image-info.yml b/Others/spring-cloud/doc/image-info.yml new file mode 100644 index 00000000..70f8f19c --- /dev/null +++ b/Others/spring-cloud/doc/image-info.yml @@ -0,0 +1,93 @@ +name: spring-cloud +category: others +description: Spring Cloud 是一套基于 Spring Boot 的分布式系统开发工具集,提供了一系列开箱即用的微服务架构解决方案。它整合了 Netflix、Consul、Zookeeper 等开源组件,简化了分布式系统基础设施的开发。 +environment: | + 本应用在Docker环境中运行,安装Docker执行如下命令 + ``` + yum install -y docker + ``` +tags: | + spring-cloud镜像的Tag由其版本信息和基础镜像版本信息组成,详细内容如下 + + | Tag | Currently | Architectures | + |----------|-------------|------------------| + |[4.3.0-oe2403sp1](https://gitee.com/openeuler/openeuler-docker-images/blob/master/Others/spring-cloud/4.3.0/24.03-lts-sp1/Dockerfile)| Spring Cloud 4.3.0 on openEuler 24.03-LTS-SP1 | amd64, arm64 | + +download: | + 拉取镜像到本地 + ``` + docker pull openeuler/spring-cloud:{Tag} + ``` + +usage: | + - 启动容器 + ``` + docker run -d --name my-spring-cloud openeuler/spring-cloud:{Tag} + ``` + + - Spring Cloud 组件: spring-cloud-starter-netflix-eureka-client简介 + + 当你引入: + ``` + + org.springcloud.cloud + spring-cloud-starter-netflix-eureka-client + + ``` + 这个 starter 会自动引入: + * `spring-cloud-commons` + * `spring-cloud-netflix-eureka-client` + + Netflix Eureka Client 基于 spring-cloud-commons 中定义的接口,提供了具体的 Eureka 实现: + + | Abstraction (`spring-cloud-commons`) | Eureka Implementation (`spring-cloud-netflix-eureka-client`) | + |--------------------------------------|--------------------------------------------------------------| + | `DiscoveryClient` | `EurekaDiscoveryClient` | + | `ServiceInstance` | `EurekaServiceInstance` | + | `ServiceRegistry` | `EurekaServiceRegistry` | + | `AutoServiceRegistration` | `EurekaAutoServiceRegistration` | + | `HealthIndicator` | `EurekaHealthIndicator` | + + + - 代码示例 + + ``` + @SpringBootApplication + @EnableDiscoveryClient // enables DiscoveryClient from spring-cloud-commons + public class MyApp { + public static void main(String[] args) { + SpringApplication.run(MyApp.class, args); + } + } + + @RestController + public class HelloController { + + @Autowired + private DiscoveryClient discoveryClient; // spring-cloud-commons + + @Autowired + private RestTemplate restTemplate; + + @Bean + @LoadBalanced // spring-cloud-commons + public RestTemplate restTemplate() { + return new RestTemplate(); + } + + @GetMapping("/call") + public String callUserService() { + // Uses EurekaDiscoveryClient under the hood + List instances = discoveryClient.getInstances("user-service"); + // Uses load balancer + Eureka for client-side discovery + return restTemplate.getForObject("http://user-service/hello", String.class); + } + } + ``` + +license: Apache-2.0 license +similar_packages: + - N/A +dependency: + - java + - maven \ No newline at end of file diff --git a/Others/spring-cloud/doc/picture/logo.png b/Others/spring-cloud/doc/picture/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..384b71324c281bed848cec09b594bfc58f6d6a67 GIT binary patch literal 33298 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%0D*xh*RhFdmsfD#d1wa z>4!ie2&M$3@6LVI`pXEejS!d+&?wPDGGOW23aoGI4NoX(dgx|%39~`yWJK+MrEwIlQq9Czb$m8wgCg(whUSkH9fDIoVNOHCs)1Yd!b}P6HFKJzSAqrvGwD z@D}qHqKO?oNX<@Gyn=toIR&c~=BHAe*!(yl5SdBV7K7Z$8;D$ae^XqP$OiF=S)#E$ zuz}-*0hJBkr*1F&!$$>`2gh($lpP~DaW&g35lv;IVA#(cv>V3jaGPa3vf7t-uJ&Jf zRRiUy#-Qy5*EH+T2i)TA>biMiIQbWxnEG=NoI`z%8`})geg~J0{jYm*rIoofjNr{x z08g&_|DUMnFsBTX-0FXMx66>;s4S~^&I8ABsy~AXzBhzD5Gmim4w`Z(&_w{w+uZbD zjw(0-&xwlj{nFhY2wRvGJfmpa=wv#Nj5u3}UIp1X@E1nN zv@QR;euW+cp{YEJ_pTg3RdeiyW;kgqcY$W`1AVHl$>0f#3OF~VS>gYUYo<^lqSJ<5 zDgGy=uOZ43K=TyflUJ(OW#*TrjQvfS1kQ~cEAU!~+~IFdpZ!~MATBi`wj_7F$Yz!` zmIB{Dv-61 z`@7L^LBqLYWI#+XsV@1NPMdi&=U6WvUeVQ^rR0Lc@2m%&q5e^$tu(@P9v7Ue%dU>ng5WIBj;op}{B#WKE0;Px{sWR;DCivkzw_1hfW3zwL=N+?v6j6EW_2fA1Z@mjoEwZr+eoCVG_kx&gi z`UeO=%j!qYX-#&fKXZfsDTfx8y15pI&Jlw5*?gCWGQrvw=Zeb%-=Qo@@kYO4k!TSk zq$CLnJl+Em4PW|ena2N(!TQvzoey>nJNB`?*JVKwAP%kBmFVs%?4!1 z7d#}~Z>~fcAD5-IgV%K!e<+2Es^g%}M%FBOHRvx};fu|^Sar$P)Rs1oC9ND>4jB`^ z;&u+iPmnRUK{jM1f>XqWgq`;~TfbNRRB~lQ&1k;lcD{v|Flp|*b=(IxwB1O-*#t(y zYWq?TAxvQ`M(tQ`LubsT^!Bf-S7exW1^9B>!Fi<7i<)FD&*m%?vJCpKg`Ca{xX;4b zQdj?jvJ(EHOCOYLD2rgBX|F5B8;E~du*~u^wNhO4h`LHBUV#lqUl#unvdba+L007v zE>8b4>D0S-3I3N?6p1+aXxdU?B+NL{IZAK=YT##!kVwRABpEJAT*X(U=aO(dt3)8tY`UKDFPvCI&>{c;aP*% z!HYPT7R@F=(!(-344MmIQ+nTE$pmAMN8pNMz980y>CiV9&aWBDeeB~t`0sY2S_Y&Ld|HrdMy~LO^M5KAM zYPU-A;oKTJDFZ8*0r>Xo;(r80thv(UI25H~1u5?=PHf*p(Ls7dGUTB5_#Iz??eY~X ziXY@qE5)z;1N696Q`h)Kt0eqT1uxnv3$t%`I@Xs17FyN|w1I-|JBNRU>b$1E>AqaNslC!(11n#?1 z98D{X1b_A-nsk6;cp#fiQZIN1#Kfb_uEz@#qhhM48mkcvJSrF2A&JOEMHUfecK8at ztbyS+CY{pb!5*dZB==Q`sasm`8Trw{5TSm=xar?|N(e&Wt0^fM&_hB63rr$^qZMaF zgm)g=+ckP$QIv08?O*N6!LYHmDcR}fDHlu_YGsM0BkXK~ux)>DZDVtI^vXQZox2l! zK@%H8bux}SD#^?8KxLFx_4Y(I`t&vx6j$6(d{=A;rx`&2V z+E5^36K^dI1^@lm-ve2H*Y^_0Qp6Le6cIthK0e2t{H7E8)l;1~B9&C4{6{ZrUrDSz z8Vgzlm}plA3iz@D*D2^36Lne+agEs#e7kQ6t?8^gz1Dy}$0+jaZf)V3nFnfC?$w4* zv>P+D5&O_va#nwYfn3ATX#F~ z2P7&idQ(7HTtHOBKvYy(Ojue(f=^gjT3A?Xni1pw`hl~{Lx)Gt{@*{4Lw#xnKY-Mf LwUmk#twR1k(IU=d literal 0 HcmV?d00001 -- Gitee