其他分享
首页 > 其他分享> > Day51 微服务SpringCloud入门***

Day51 微服务SpringCloud入门***

作者:互联网

Spring Cloud介绍

Spring Cloud架构

在这里插入图片描述

开发微服务的三个要素

》dubbo发布的服务,有三个要素
一是提供者
二是消费者
三是注册中心
在这里插入图片描述
》springcloud 发布的服务,有三个要素
一是提供者
二是消费者
三是注册中心

在这里插入图片描述

创建微服务工程

在这里插入图片描述

搭建配置服务(provider)工程

application.properties

# service name
spring.application.name=demo01_provider_user_8001
# server port
server.port=8001

》3. 编写测试代码(UserController);

UserController

@RestController
@RequestMapping("/users")
public class UserController {
    @RequestMapping(path = "/{id}",method = {RequestMethod.GET})
    public Object  get(@PathVariable long id){
        //模拟一条数据
        User user = new User();
        user.setId(id);
        user.setUsername("jack"+id);
        user.setPassword("123456");
        return user;//RestController将user转成json
    }
}

》4. 测试
使用postman
在这里插入图片描述

搭建配置消费(consumer)工程

application.properties

spring.application.name=demo02_consumer_user_81
server.port=81

》3. 编写测试代码

CosumerController

@RestController
@RequestMapping("/consumer")
public class CustomerController {
    @Autowired
    RestTemplate rt;//当前是使用RestTemplate调用demo01的数据

    //需要在启动类创建当前对象
    //然后由Autowired去获取
    @RequestMapping(path = "/{id}", method = RequestMethod.GET)
    public Object get(@PathVariable long id) {
        //消费工程,只是调用其他服务来获得想要的数据
        String url = "http://localhost:8001/users/11";//参1 地址
        String json = rt.getForObject(url, String.class);//参2:数据要转换成什么类型
        return json;
    }
}

(ConsumerController中使用restTemplate访问服务获取数据)

@SpringBootApplication
public class Demo02ConsumerUser81Application {

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

    @Bean
    public RestTemplate getRt() {
        RestTemplate rt = new RestTemplate();
        return rt;
    }
}

》4. 测试
在这里插入图片描述

Eureka注册中心说明

搭建eureka-server工程

  1. 创建工程;
  2. 添加启动器依赖;
  3. 修改配置文件(端口,应用名称…);
  4. 编写启动引导类(添加Eureka的服务注解)和配置文件;
  5. 启动测试

pom.xml

 <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
        </dependency>

阿里云目前还没有更新,所以需要保留官网的仓库地址

 <repositories>
        <repository>
            <id>spring-milestones</id>
            <name>Spring Milestones</name>
            <url>https://repo.spring.io/milestone</url>
        </repository>
    </repositories>

application.properties

spring.application.name=demo03_register_center_eureka_10086
server.port=10086
#  eureka 服务地址,如果是集群的话;需要指定其它集群eureka地址
eureka.client.service-url.defaultZone=http://localhost:10086/eureka
# 不注册自己
eureka.client.register-with-eureka=false
# 不拉取服务
eureka.client.fetch-registry=false

启用

@SpringBootApplication
@EnableEurekaServer
public class Demo03RegisterCenterEurekaApplication {

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

}

pom.xml的抽取

父 pom.xml

 <!-- 注意父工程的打包方式是pom-->
    <packaging>pom</packaging>
    <modules>
        <module>demo01_provider_user_8001</module>
        <module>demo02_consumer_user_81</module>
        <module>demo03_register_center_eureka_10086</module>
    </modules>

    <properties>
        <java.version>1.8</java.version>
        <spring-cloud.version>2020.0.0-M5</spring-cloud.version>
    </properties>
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.16</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

    <repositories>
        <repository>
            <id>spring-milestones</id>
            <name>Spring Milestones</name>
            <url>https://repo.spring.io/milestone</url>
        </repository>
    </repositories>

子pom.xml

 <parent>
        <groupId>com.wzx</groupId>
        <artifactId>micro_service_spring_cloud_parent</artifactId>
        <version>1.0-SNAPSHOT</version>
    </parent>

provider与consumer

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>

server

  <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
        </dependency>

服务注册与发现

provider注册

pom.xml

 <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>

applicaton.properties

# register address
eureka.client.service-url.defaultZone=http://127.0.0.1:10086/eureka

main

@SpringBootApplication
@EnableEurekaClient
public class Demo01ProviderUser8001Application

consumer查询

pom.xml

  <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>

application.properties

# query address
eureka.client.service-url.defaultZone=http://127.0.0.1:10086/eureka

main

@SpringBootApplication
@EnableEurekaClient
public class Demo02ConsumerUser81Application 

DiscoveryClient 对象

@Autowired
   DiscoveryClient discoveryClient;
   //需要在启动类创建当前对象
   //然后由Autowired去获取
   @RequestMapping(path = "/{id}", method = RequestMethod.GET)
   public Object get(@PathVariable long id) {

       //获取 provider ip与端口
       List<ServiceInstance> list = discoveryClient.getInstances("demo01_provider_user_8001");//服务id
       //表示运行中的服务对象
       ServiceInstance serviceInstance = list.get(0);
       String host = serviceInstance.getHost();
       int port = serviceInstance.getPort();
       log.info("host "+host);
       log.info("port "+port);
       //消费工程,只是调用其他服务来获得想要的数据
       String url = "http://"+host+":"+port+"/users/11";//参1 地址
       //String url = "http://localhost:8001/users/11";//参1 地址
       String json = rt.getForObject(url, String.class);//参2:数据要转换成什么类型
       return json;
   }

标签:服务,入门,spring,eureka,user,SpringCloud,Day51,Eureka,cloud
来源: https://blog.csdn.net/u013621398/article/details/109982919