Explorar el Código

feat:使用RestTemplate配置LoadBalancer负载均衡组件通过服务名称调用注册到nacos的服务提供方

yang yi hace 1 año
padre
commit
208cf1ad39

+ 6 - 0
member-service-consumer/pom.xml

@@ -16,6 +16,12 @@
         <maven.compiler.target>17</maven.compiler.target>
     </properties>
     <dependencies>
+        <!--新版的nacos负载均衡组件使用的是LoadBalancer,旧版使用的是Ribbon-->
+        <dependency>
+            <groupId>org.springframework.cloud</groupId>
+            <artifactId>spring-cloud-starter-loadbalancer</artifactId>
+            <version>3.1.5</version>
+        </dependency>
         <!--引入nacos的服务发现依赖-->
         <dependency>
             <groupId>com.alibaba.cloud</groupId>

+ 2 - 0
member-service-consumer/src/main/java/anyi/space/memberConsumer/config/RestTemplateConfig.java

@@ -1,5 +1,6 @@
 package anyi.space.memberConsumer.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;
@@ -14,6 +15,7 @@ import org.springframework.web.client.RestTemplate;
 @Configuration
 public class RestTemplateConfig {
     @Bean
+    @LoadBalanced
     public RestTemplate getRestTemplate(){
         return new RestTemplate();
     }

+ 1 - 2
member-service-consumer/src/main/java/anyi/space/memberConsumer/controller/MemberConsumerController.java

@@ -26,8 +26,7 @@ public class MemberConsumerController {
     private final MemberService memberService;
     @GetMapping
     public ResponseResult<Member> getMemberById(Long id){
-        Member member = memberService.getById(id);
-        return ResponseResult.okResult(member);
+        return memberService.getById(id);
     }
     @PostMapping
     public ResponseResult addMember(Member member){

+ 2 - 1
member-service-consumer/src/main/java/anyi/space/memberConsumer/service/MemberService.java

@@ -1,6 +1,7 @@
 package anyi.space.memberConsumer.service;
 
 import anyi.sapce.common.entity.Member;
+import anyi.sapce.common.entity.ResponseResult;
 
 /**
  * @ProjectName: distributedSystemLearn
@@ -10,7 +11,7 @@ import anyi.sapce.common.entity.Member;
  * @Description:
  */
 public interface MemberService {
-    Member getById(Long id);
+    ResponseResult getById(Long id);
 
     boolean save(Member member);
 }

+ 7 - 16
member-service-consumer/src/main/java/anyi/space/memberConsumer/service/impl/MemberServiceIml.java

@@ -4,7 +4,6 @@ import anyi.sapce.common.entity.Member;
 import anyi.sapce.common.entity.ResponseResult;
 import anyi.space.memberConsumer.service.MemberService;
 import lombok.RequiredArgsConstructor;
-import org.springframework.http.HttpEntity;
 import org.springframework.http.ResponseEntity;
 import org.springframework.stereotype.Service;
 import org.springframework.web.client.RestTemplate;
@@ -22,29 +21,21 @@ import java.util.Map;
 @Service
 public class MemberServiceIml implements MemberService {
     private final RestTemplate restTemplate;
+    //基本的服务名
+    public static final String BASE_URL = "http://member-service-provider";
     @Override
-    public Member getById(Long id) {
+    public ResponseResult getById(Long id) {
         /**
-         * 通过RestTemplate调用远程服务
+         * 使用服务名通过RestTemplate调用远程服务
          */
-        ResponseEntity<ResponseResult> resultResponseEntity = restTemplate.getForEntity("http://localhost:10001/member-provider/member?id="+id, ResponseResult.class);
-        Object data = resultResponseEntity.getBody().getData();
-        //映射请求结果
-        Map map = (Map) data;
-        Member member = new Member();
-        id = Long.valueOf(map.get("id") + "");
-        member.setId(id);
-        member.setName((String) map.get("name"));
-        member.setPwd((String) map.get("pwd"));
-        member.setEmail((String) map.get("email"));
-        member.setGender((int)map.get("gender"));
-        return member;
+        ResponseEntity<ResponseResult> resultResponseEntity = restTemplate.getForEntity(BASE_URL + "/member-provider/member?id="+id, ResponseResult.class);
+        return resultResponseEntity.getBody();
     }
 
     @Override
     public boolean save(Member member) {
         //直接传递参数,是使用json的格式提交数据
-        ResponseEntity<ResponseResult> responseResultResponseEntity = restTemplate.postForEntity("http://localhost:10001/member-provider/member", member, ResponseResult.class);
+        ResponseEntity<ResponseResult> responseResultResponseEntity = restTemplate.postForEntity(BASE_URL + "/member-provider/member", member, ResponseResult.class);
         //HttpEntity<String> stringHttpEntity = new HttpEntity<>();
         Object data = responseResultResponseEntity.getBody().getData();
         boolean flag = (boolean) data;

+ 3 - 1
member-service-provider_10000/src/main/java/anyi/space/memberServer/controller/MemberController.java

@@ -24,7 +24,9 @@ public class MemberController {
     @GetMapping
     public ResponseResult<Member> getMemberById(Integer id){
         Member member = memberService.getById(id);
-        return ResponseResult.okResult(member);
+        ResponseResult responseResult = ResponseResult.okResult(member);
+        responseResult.setMsg("服务提供方10001返回的数据");
+        return responseResult;
     }
     @PostMapping
     public ResponseResult addMember(@RequestBody Member member){

+ 4 - 0
member-service-provider_10000/src/main/resources/application.yaml

@@ -16,6 +16,10 @@ spring:
     nacos:
       discovery:
         server-addr: localhost:8848
+management:
+  endpoint:
+    web:
+      exposure: '*'
 mybatis-plus:
   configuration:
     log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

+ 3 - 1
member-service-provider_10002/src/main/java/anyi/space/memberServer/controller/MemberController.java

@@ -24,7 +24,9 @@ public class MemberController {
     @GetMapping
     public ResponseResult<Member> getMemberById(Integer id){
         Member member = memberService.getById(id);
-        return ResponseResult.okResult(member);
+        ResponseResult responseResult = ResponseResult.okResult(member);
+        responseResult.setMsg("服务提供方10002返回的数据");
+        return responseResult;
     }
     @PostMapping
     public ResponseResult addMember(@RequestBody Member member){

+ 4 - 0
member-service-provider_10002/src/main/resources/application.yaml

@@ -16,6 +16,10 @@ spring:
     nacos:
       discovery:
         server-addr: localhost:8848
+management:
+  endpoint:
+    web:
+      exposure: '*'
 mybatis-plus:
   configuration:
     log-impl: org.apache.ibatis.logging.stdout.StdOutImpl