栏目分类:
子分类:
返回
终身学习网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
终身学习网 > IT > 前沿技术 > 大数据 > 大数据系统

服务注册与调用入门(重点)

大数据系统 更新时间:发布时间: 百科书网 趣学号

业务描述:
创建两个项目Module分别为服务提供者和服务消费者(假如已有则无需创建),两者都要注册到NacosServer中(这个server本质上就是一个web服务,端口默认为8848),然后服务提供者可以为服务消费者提供远端调用服务(例如支付服务为服务提供方,订单服务为服务消费方),如图所示

 生产者服务创建及注册

第一步:创建服务提供者工程(module名为sca-provider,假如已有则无需创建),继承parent工程(01-sca),其pom.xml文件



    
        01-sca
        com.jt
        1.0-SNAPSHOT
    
    4.0.0
    sca-provider
    
        
        
            org.springframework.boot
            spring-boot-starter-web
        
        
        
            com.alibaba.cloud
            spring-cloud-starter-alibaba-nacos-discovery
        
    

第二步:创建并修改配置文件application.yml(或者application.properties),实现服务注册,关键代码如下:

server:
   port: 8081
spring:
  application:
    name: sca-provider #进行服务注册必须配置服务名 #注意:服务名不要使用下划线(“_”),应使用横杠(“-”),这是规则。
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848

第三步:创建启动类(假如已有则无需定义),关键代码如下:

package com.jt;

@SpringBootApplication
public class ProviderApplication {

    public static void main(String[] args) {
        SpringApplication.run(ProviderApplication.class, args);
    }
  }

第四步:启动启动类,然后刷先nacos服务,检测是否服务注册成功,如图所示:

 第五步:停掉sca-provider服务,然后不断刷新nacos服务列表,检查服务的健康状态。

消费者服务发现及调用

第一步: 在sca-provider项目中创建服务提供方对象,基于此对象对外提供服务,例如:

package com.jt.provider.controller;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class ProviderController {
    //@Value默认读取项目配置文件中配置的内容
    //8080为没有读到server.port的值时,给定的默认值
    @Value("${server.port:8080}")
     private String server;
    @GetMapping("/provider/echo/{msg}")
    public String doRestEcho1(@PathVariable String msg){
    return server+" say hello "+msg;

    }
}

第二步:创建服务消费者工程(module名为sca-consumer,假如已有则无需创建),继承parent工程(01-sca),其pom.xml文件内容如下: 



    
        01-sca
        com.jt
        1.0-SNAPSHOT
    
    4.0.0

    sca-common


    
    
        com.alibaba.cloud
        spring-cloud-starter-alibaba-nacos-discovery
    

    
    
        org.springframework.boot
        spring-boot-starter-web
    

 第三步:创建sca-consumer服务中的配置文件application.yml,关键代码如下:

server:
  port: 8090
spring:
  application:
    name: sca-consumer #服务注册时,服务名必须配置
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848 #从哪里去查找服务

 第四步:创建消费端启动类并实现服务消费,关键代码如下:

package com.jt;
@SpringBootApplication
public class ConsumerApplication {
    public static void main(String[] args) {
        SpringApplication.run(ConsumerApplication.class,args);
    }
}

 第五步:在sca-consumer启动类中添加如下方法,用于创建RestTemplate对象.

RestTemplate简介:

服务消费方是如何调用服务提供方的服务的?(RestTemplate)

//基于此对象实现远端服务调用

RestTemplate 是从 Spring3.0 开始支持的一个 HTTP 请求工具,它提供了常见的REST请求方案的模版,例如 GET 请求、POST 请求、PUT 请求、DELETE 请求以及一些通用的请求执行方法 exchange 以及 execute。RestTemplate 继承自 InterceptingHttpAccessor 并且实现了 RestOperations 接口,其中 RestOperations 接口定义了基本的 RESTful 操作,这些操作在 RestTemplate 中都得到了实现。接下来我们就来看看这些操作方法的使用。

@Bean
public RestTemplate restTemplate(){//基于此对象实现远端服务调用
    return new RestTemplate();
}

第六步:定义sca-consumer服务的消费端Controller,在此对象方法内部实现远端服务调用 

package com.jt.com.jt.consumer.controller;
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.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 ConsumerController {
    
    @Autowired
    private RestTemplate restTemplate;
    @Value("${spring.application.name:8090}")
    private String appName;
    
    @GetMapping("/consumer/doRestEcho1")
    public String doRestEcho01(){
        //1.定义要调用的远端服务的url
        String url="http://localhost:8081/provider/echo/8090";
        //2.基于restTemplate对象中的相关方法进行服务调用
        return restTemplate.getForObject(url, //远端服务的url
                String.class);//远端服务url对应的返回值类型
    }

第七步:启动消费者服务,并在浏览器输入http://localhost:8090/consumer/doRestEcho1地址进行访问,假如访问成功会出现,如图所示效果:


小节面试分析:

为什么要将服务注册到nacos?(为了更好的查找这些服务)
在Nacos中服务提供者是如何向Nacos注册中心(Registry)续约的?(5秒心跳)
对于Nacos服务来讲它是如何判定服务实例的状态?(检测心跳包,15,30)
服务消费方是如何调用服务提供方的服务的?(RestTemplate)
 

转载请注明:文章转载自 www.051e.com
本文地址:http://www.051e.com/it/601854.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 ©2023-2025 051e.com

ICP备案号:京ICP备12030808号