服务注册中心 Eureka 支付微服务集群配置
服务提供者也应该是个集群。多个提供者
1.参照8001创建8002的module
创建名称为“cloud-provider-payment8002”
2.改POM
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <parent> <artifactId>ckfuture-springcloud</artifactId> <groupId>com.ckfuture.springcloud</groupId> <version>1.0-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>cloud-provider-payment8002</artifactId> <dependencies> <!--引入自定定义的api通用包,可以使用Payment支付实体--> <dependency> <groupId>com.ckfuture.springcloud</groupId> <artifactId>cloud-api-commons</artifactId> <version>${project.version}</version> </dependency> <!--Eureka-client--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid-spring-boot-starter</artifactId> <version>1.1.10</version> </dependency> <!--mysql-connector-java--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> <!--jdbc--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> </dependency> <!--热部署devtools--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <scope>runtime</scope> <optional>true</optional> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <!--引入Swagger --> <dependency> <groupId>com.spring4all</groupId> <artifactId>spring-boot-starter-swagger</artifactId> </dependency> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger2</artifactId> </dependency> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger-ui</artifactId> </dependency> <dependency> <groupId>com.github.caspar-chen</groupId> <artifactId>swagger-ui-layer</artifactId> </dependency> </dependencies> </project>
3.建YML
server: port: 8002 spring: application: name: cloud-payment-service datasource: type: com.alibaba.druid.pool.DruidDataSource driver-class-name: org.gjt.mm.mysql.Driver url: jdbc:mysql://localhost:3306/standarddb?userUnicode=true&characterEncoding=utf-8&useSSL=false username: sa password: HRBJYKJ-Battery mybatis: mapper-locations: classpath:mapper/*.xml type-aliases-package: com.atguigu.springcloud.entities eureka: client: #表示是否将自己注册进EurekaServer,默认true register-with-eureka: true #是否从EurekaServer抓取已有的注册信息,默认为true。单节点无所谓,集群必须设置true才能配合ribbon使用负载均衡。 fetch-registry: true service-url: defaultZone: http://eurreka7001.com:7001/eureka,http://eureka7002.com:7002/eureka #集群版
4.创建主启动
package com.ckfuture.springcloud; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.netflix.eureka.EnableEurekaClient; /** * @descrption: 支付生产者微服务主启动类 * @author: CKFuture * @since: 2021-10-09 21:18 * @version: v1.0 * @LastEditTime: * @LastEditors: * @copyright: hrbckfuture.com */ @SpringBootApplication @EnableEurekaClient public class PaymentMain8002 { private static final Logger logger = LoggerFactory.getLogger(PaymentMain8002.class); public static void main(String[] args) { SpringApplication.run(PaymentMain8002.class,args); logger.info("------------ API Service8002 Start Running--------------"); } }
5.创建controll和service
package com.ckfuture.springcloud.dao; import com.ckfuture.springcloud.entities.Payment; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; /** * @descrption: 支付持久化接口 * @author: CKFuture * @since: 2021-10-09 22:25 * @version: v1.0 * @LastEditTime: * @LastEditors: * @copyright: hrbckfuture.com */ @Mapper public interface PaymentDao { /** * 添加 * @param payment * @return */ public int create(Payment payment); /** * 通过id查询数据 * @param id * @return */ public Payment getPaymentById(@Param("id") Long id); }
package com.ckfuture.springcloud.service; import com.ckfuture.springcloud.entities.Payment; import org.apache.ibatis.annotations.Param; /** * @descrption: 支付服务接口 * @author: CKFuture * @since: 2021-10-09 22:26 * @version: v1.0 * @LastEditTime: * @LastEditors: * @copyright: hrbckfuture.com */ public interface PaymentService { /** * 添加 * @param payment * @return */ public int create(Payment payment); /** * 通过id查询数据 * @param id * @return */ public Payment getPaymentById(@Param("id") Long id); }
package com.ckfuture.springcloud.service.impl; import com.ckfuture.springcloud.dao.PaymentDao; import com.ckfuture.springcloud.entities.Payment; import com.ckfuture.springcloud.service.PaymentService; import org.springframework.stereotype.Service; import javax.annotation.Resource; /** * @descrption: 支付服务接口实现类 * @author: CKFuture * @since: 2021-10-09 22:26 * @version: v1.0 * @LastEditTime: * @LastEditors: * @copyright: hrbckfuture.com */ @Service public class PaymentServiceImpl implements PaymentService { @Resource private PaymentDao paymentDao; public int create(Payment payment){ return paymentDao.create(payment); } public Payment getPaymentById(Long id){ return paymentDao.getPaymentById(id); } }
6.修改8001和8002 的controller
8001Controller:
package com.ckfuture.springcloud.controller; import com.ckfuture.springcloud.entities.CommonResult; import com.ckfuture.springcloud.entities.Payment; import com.ckfuture.springcloud.service.PaymentService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; @Api(tags={"支付接口"}) @RestController @Slf4j public class PaymentController { @Resource private PaymentService paymentService; @Value("${server.port}") private String serverPort; @PostMapping(value = "/payment/create") public CommonResult create(@RequestBody Payment payment){ int result = paymentService.create(payment); log.info("*****插入结果:"+result); if(result > 0){ return new CommonResult(200,"插入数据库成功,serverPort:"+serverPort,result); }else { return new CommonResult(301,"插入数据库失败",null); } } @GetMapping(value = "/payment/get/{id}") public CommonResult getPaymentById(@PathVariable("id") Long id){ Payment payment = paymentService.getPaymentById(id); if(payment != null){ return new CommonResult(200,"查询成功,serverPort:"+serverPort,payment); }else { return new CommonResult(301,"没有对应记录,查询Id:"+id,null); } } }
便于后续观察调用的具体哪个提供者。
7.启动测试
依次启动7001,7002,8001,8002,80
查看EurekaServer集群:
8.修改消费者(80端口)的controller
在之前的单机版本调用生产者服务是写死的8001地址,这样即使是有多个生产者提供服务但是消费者由于是写死的服务地址,只能就调用一个。
想需要改成EurekaServer中的注册的提供者名称。
package com.ckfuture.springcloud.controller; import com.ckfuture.springcloud.entities.CommonResult; import com.ckfuture.springcloud.entities.Payment; import io.swagger.annotations.Api; import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.client.RestTemplate; import javax.annotation.Resource; /** * @descrption: 消费者控制类 * @author: CKFuture * @since: 2021-10-11 20:52 * @version: v1.0 * @LastEditTime: * @LastEditors: * @copyright: hrbckfuture.com */ @Api(tags={"消费者接口"}) @RestController @Slf4j public class OrderController { //public static final String PAYMENT_URL = "http://localhost:8001"; //单机版 public static final String PAYMENT_URL = "http://CLOUD-PAYMENT-SERVICE";//负载均衡版 @Resource private RestTemplate restTemplate; @GetMapping("/consumer/payment/create") public CommonResult<Payment> create(Payment payment){ return restTemplate.postForObject(PAYMENT_URL+"/payment/create",payment, CommonResult.class); } @GetMapping("consumer/payment/get/{id}") public CommonResult<Payment> getPayment(@PathVariable("id") Long id){ return restTemplate.getForObject(PAYMENT_URL+"/payment/get/"+id,CommonResult.class); } }
9.修改消费者(80)端口的ApplicationgContextConfig配置
添加“@LoadBalanced” 注解赋予restTemplent负载均衡能力
package com.ckfuture.springcloud.config;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;
/**
* @descrption: 配置类
* @author: CKFuture
* @since: 2021-10-11 20:29
* @version: v1.0
* @LastEditTime:
* @LastEditors:
* @copyright: hrbckfuture.com
*/
@Configuration
public class ApplicationContextConfig {
/**
* RestTemplate 通过LoadBalanced注解赋予RestTemplate负载均衡能力
* @return
*/
@Bean
@LoadBalanced
public RestTemplate getRestTemplate(){
return new RestTemplate();
}
}
10.测试负载均衡
通过刷新请求,发现两个提供者(8001和8002轮流提供服务)。
分类:
SpringCloud
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!