文档首页/ 应用平台 AppStage/ SDK参考/ 运行时引擎/ Cloud Map SDK/ 使用Cloud Map SDK(Spring Cloud框架)
更新时间:2024-04-09 GMT+08:00
分享

使用Cloud Map SDK(Spring Cloud框架)

引入Cloud Map SDK

  1. 引入STS

    Cloud Map依赖STS认证能力,接入Cloud Map必须接入STS,具体请参考引入STS SDK

  2. 引入Cloud Map
    在pom.xml中添加Cloud Map SDK依赖。
    <dependency>
       <groupId>com.huawei.wisecloud.nuwa</groupId>
       <artifactId>nuwa-cloudmap-core</artifactId>
       <version>${cloudmap-sdk-version}</version>
    </dependency>
  • 将${cloudmap-sdk-version}替换成实际所使用的Cloud Map SDK版本。
  • 如果将SDK放到外部maven仓中,则只需要添加nuwa-cloudmap-core依赖。
  • 如果采用本地依赖的方式引入SDK,即手动将本地下载的SDK jar包引入到工程的lib目录下,还需要添加间接依赖:nuwa-cloudmap-spring-boot-starter、spring-cloud-starter-cloudmap-discovery。

配置Cloud Map

在微服务的application.yaml配置文件中添加以下配置项:

nuwa:
  cloudmap:
    read: cloudmap                              #使用Cloud Map方式进行微服务间通信
    clusterName: clusterName-example            #微服务注册到Cloud Map的集群 
    provider:
      cluster: clusterName-example              #提供服务的其他同样被注册到Cloud Map的微服务集群名 
    serverAddr: http://10.34.32.243:80          #Cloud Map访问地址
    version: 1.0.0.100                          #微服务版本号
    namespaceName: cn_dev_default               #Cloud Map访问命名空间

初始化Cloud Map

在启动类中增加@EnableDiscoveryClient注解,同时在启动类中完成将RestTemplate放到spring容器中,后续微服务间调用就使用注册到spring容器中的RestTemplate,代码如下:

package com.huawei.demo.servicea;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate;

import com.huawei.wisesecurity.sts.springboot.security.annotation.EnableStsAutoInitialization;

@SpringBootApplication
@EnableStsAutoInitialization(value = "application.properties")
@EnableDiscoveryClient
public class ServiceASpringbootApplication {
    public static void main(String[] args) {
        SpringApplication.run(ServiceASpringbootApplication.class, args);
    }

    @Bean
    @LoadBalanced
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }
}

微服务间调用:

public OrderInfo findOrder(String orderId, HttpServletRequest request) {
        OrderInfo orderInfo = orderMapper.getOrderById(orderId);
        String url = demoServiceAUrl + "/user/" + orderInfo.getUserId();
        HttpHeaders headers = createHeaders(request);
        HttpEntity<String> entity = new HttpEntity<>(null, headers);
        ResponseEntity<UserInfo> responseEntity = restTemplate.exchange(url, HttpMethod.GET, entity, UserInfo.class); ;
        if (responseEntity != null) {
            orderInfo.setUserInfo(responseEntity.getBody());
        }
        return orderInfo;
    }

相关文档