新建springcloud项目(二):nacos

 学习项目代码,nacos和sentinel下载地址: 微服务学习代码.zip-互联网文档类资源-优快云文库

目录

一:测试nacos项目注册:

二:项目间调用:


一:测试nacos项目注册:

1.在springcloud_parent 父项目中创建新module项目:nacosclient 项目

2.修改pom.xml

    <modelVersion>4.0.0</modelVersion>
    <artifactId>springcloud_nacosclient</artifactId>

    <parent>
        <artifactId>springcloud_parent</artifactId>
        <groupId>com.example</groupId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <!--引入nacos-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
    </dependencies>

3.application.properties修改配置

server.port=8989

#推荐大写
spring.application.name=NACOSCLIENT

#nacos server 地址
spring.cloud.nacos.server-addr=localhost:8848

二:项目间调用:

1.新建module项目:users和products

users项目:pom.xml

<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <!--引入nacos-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>

        <!--引入openfeign-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>
    </dependencies>

products项目:pom.xml

<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!--引入nacos-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
    </dependencies>

users项目:application.properties

server.port=8990
spring.application.name=USERS


#nacos server 地址
spring.cloud.nacos.server-addr=localhost:8848

products项目:application.properties 

server.port=8991
spring.application.name=PRODUCTS


#nacos server 地址
spring.cloud.nacos.server-addr=localhost:8848

products项目:ProductController

@RestController
public class ProductController {

    private static final Logger log = LoggerFactory.getLogger(ProductController.class);

    @Value("${server.port}")
    private int port;

    @GetMapping("/product")
    public String product(Integer id){
        log.info("id: {}",id);
        return "商品服务调用返回:" + id + ",当前服务端口为:" + port;
    }
}

users项目:BeansConfig ---负载均衡配置 RestTemplate

@Configuration
public class BeansConfig {

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

}

users项目:ProductClient ---openfeign方式调用

@FeignClient("PRODUCTS")
public interface ProductClient {

    @GetMapping("/product")
    String product(@RequestParam("id") Integer id);
}

users项目:UsersApplication ---添加注解 @EnableFeignClients //开启openfeign调用支持

@SpringBootApplication
@EnableFeignClients //开启openfeign调用支持
public class UsersApplication {
    public static void main(String[] args) {
        SpringApplication.run(UsersApplication.class,args);
    }
}

users项目:UserController --- 服务间通信测试

import com.baizhi.feignclients.ProductClient;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.client.ServiceInstance;
import org.springframework.cloud.client.discovery.DiscoveryClient;
import org.springframework.cloud.client.loadbalancer.LoadBalancerClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

@RestController
public class UserController {
    private static final Logger log = LoggerFactory.getLogger(UserController.class);

    @Value("${server.port}")
    private int port;

    @Autowired
    private DiscoveryClient discoveryClient; //服务发现客户端

    @Autowired
    private LoadBalancerClient loadbalanceClient; //负载均衡客户端

    @Autowired
    private RestTemplate restTemplate; //负载均衡注解

    @Autowired
    private ProductClient productClient; //openfeign方式调用

    @GetMapping("/invoke")
    public String invokePorduct(){
        log.info("调用用户服务...");
        //1.RestTemplate方式调用: 缺点:1.无法实现请求负载均衡 2.路径写死代码中不利于后续维护
//        String result = new RestTemplate().getForObject("http://localhost:8991/product?id=1",String.class);

        //2.RestTemplate + ribbon 方式调用 ribbon: DiscoveryClient LoadBalancerClient @LoadBalanced
        //2.1:DiscoveryClient
//        List<ServiceInstance> serviceInstances = discoveryClient.getInstances("PRODUCTS");
//        for (ServiceInstance serviceInstance : serviceInstances) {
//            log.info("服务的主机:{} 服务端口:{} 服务URI:{}",serviceInstance.getHost(),serviceInstance.getPort(),serviceInstance.getUri());
//        }
//        String result = new RestTemplate().getForObject(serviceInstances.get(0).getUri() + "/product?id=1",String.class);

        //2.2:LoadBalancerClient 已经进行负载均衡后的节点,负载均衡方式:轮询
//        ServiceInstance serviceInstance = loadbalanceClient.choose("PRODUCTS");
//        String result = new RestTemplate().getForObject(serviceInstance.getUri() + "/product?id=1",String.class);

        //2.3: @LoadBalanced
//        String result = this.restTemplate.getForObject("http://PRODUCTS/product?id=1",String.class);

        //3. openfeign
        String result = productClient.product(1);
        log.info("商品服务调用结果: {}", result);
        return result;
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值