SpringCloud微服务—Eureka服务注册与发现

目录

一、SpringCloud介绍

二、Spring Cloud 入门 

1、注册中心eureka-server

(1)在创建项目的的时候选择【Eureka Server】

(2)配置Eureka信息

(3)@EnableEurekaServer开启eureka

(4)运行结果

2、创建服务提供者 【provider-ticket】

(1)在创建项目的的时候选择【Eureka Discover Client】

(2)编写Service和Controller

扫描二维码关注公众号,回复: 8523365 查看本文章

(3)服务配置

(4)运行项目,运行的时候注册中心也保持运行状态

补充:如何把同一个应用在注册中心注册多次呢?

A、分别把配置文件中的端口者设置成8001和8002打包

B、打包完成如下

C、运行:java -jar provider-ticket-0.0.1-SNAPSHOT-8001.jar和java -jar provider-ticket-0.0.1-SNAPSHOT-8002.jar

D、在注册中心中查看

3、创建consumer 【consumer-user】

(1)【在创建项目的的时候选择【Eureka Discover Client】

(2)配置

(3)在主配置文件中进行配置并引入RestTemplate 

(3)Controller调用服务提供者提供的服务

(4)运行结果

注意:这个还采用了负载均衡机制,可以查看控制台


一、SpringCloud介绍

Spring Cloud 是一个分布式的整体解决方案。Spring Cloud 为开发者提供了在分布式系统(配 置管理,服务发现,熔断,路由,微代理,控制总线,一次性token,全局琐,leader选举,分 布式session,集群状态)中快速构建的工具,使用Spring Cloud的开发者可以快速的启动服务 或构建应用、同时能够快速和云平台资源进行对接。

二、Spring Cloud 入门 

首先创建一个空项目,然后分别常见三个模块:注册中心【eureka-server】、服务提供者【provider-ticket】、服务使用者【consumer-user】

1、注册中心eureka-server

(1)在创建项目的的时候选择【Eureka Server】

pom文件:

 <properties>
        <java.version>1.8</java.version>
        <spring-cloud.version>Hoxton.RELEASE</spring-cloud.version>
    </properties>

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

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>

    <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>

(2)配置Eureka信息

server.port=8761
#eureka实例的主机名
eureka.instance.hostname=eureka-server  
#不做高可用的情况下可置为false;不把自己注册到eureka上
eureka.client.register-with-eureka=false 
#不从eureka上来获取服务的注册信息
eureka.client.fetch-registry=false
eureka.client.service-url.defaultZone=http://localhost:8767/eureka/

(3)@EnableEurekaServer开启eureka

/**
 * 注册中心
 * 1、配置Eureka信息
 * 2、@EnableEurekaServer开启eureka
 */
@EnableEurekaServer
@SpringBootApplication
public class EurekaServerApplication {

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

}

(4)运行结果

运行项目后浏览器访问:http://localhost:8761,看到:

2、创建服务提供者 【provider-ticket】

(1)在创建项目的的时候选择【Eureka Discover Client】

pom文件:

<properties>
        <java.version>1.8</java.version>
        <spring-cloud.version>Hoxton.RELEASE</spring-cloud.version>
    </properties>

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

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>

    <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>

(2)编写Service和Controller

@Service
public class TicketService {
    public String getTicket(){
        return "厉害了我的国";
    }
}
@RestController
public class TicketController {
    @Autowired
    TicketService ticketService;

    @GetMapping("/ticket")
    public String getTicket(){
        return ticketService.getTicket();
    }
}

(3)服务配置

server.port=8001
spring.application.name=provider-ticket

#注册服务的时候使用服务的ip地址
eureka.instance.prefer-ip-address=true
eureka.client.service-url.defaultZone=http://localhost:8761/eureka/

(4)运行项目,运行的时候注册中心也保持运行状态

访问:http://localhost:8001/ticket

此时再查看注册中心:

-------------------------------------------------------------------------

补充:如何把同一个应用在注册中心注册多次呢?

A、分别把配置文件中的端口者设置成8001和8002打包

B、打包完成如下

C、运行:java -jar provider-ticket-0.0.1-SNAPSHOT-8001.jar和java -jar provider-ticket-0.0.1-SNAPSHOT-8002.jar

D、在注册中心中查看

会看到一个同一个应用的两个实例都被注册进来了

---------------------------------------------------------------------------------------

3、创建consumer 【consumer-user】

(1)【在创建项目的的时候选择【Eureka Discover Client】

pom文件通服务提供者一样

(2)配置

server.port=8200
spring.application.name=consumer-user

#注册服务的时候使用服务的ip地址
eureka.instance.prefer-ip-address=true
eureka.client.service-url.defaultZone=http://localhost:8761/eureka/


(3)在主配置文件中进行配置并引入RestTemplate 

@SpringBootApplication
@EnableDiscoveryClient  //开启从注册中心发现服务功能
public class ConsumerUserApplication {

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

    @LoadBalanced   //使用负载均衡机制
    @Bean
    public RestTemplate restTemplate(){
        return new RestTemplate();
    }

}

(3)Controller调用服务提供者提供的服务

@RestController
public class UserController {

    @Autowired
    RestTemplate restTemplate;

    @GetMapping("/buy")
    public String buyTicket(String name){
        String s = restTemplate.getForObject("http://PROVIDER-TICKET/ticket", String.class);
        return name+"购买了"+s;
    }
}

说明:http://PROVIDER-TICKET/ticket

PROVIDER-TICKET对应下面这个:

ticket:是服务提供者提供的服务接口

(4)运行结果

访问:http://localhost:8200/buy?name=张三

再次刷新注册中心,会发现多了一个实例

注意:这个还采用了负载均衡机制,可以查看控制台

发布了96 篇原创文章 · 获赞 16 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/qq_38151401/article/details/103513375