专栏首页海涛技术日常spring cloud eureka服务发现注册(二)

spring cloud eureka服务发现注册(二)

环境说明:spring boot2.0 + jdk1.8

第一步:搭建eureka server,创建一个maven项目,也可以直接idea或者 https://start.spring.io/ 快速创建 pom.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.4.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.hht</groupId>
    <artifactId>eureka-server</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>eureka-server</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>1.8</java.version>
        <spring-cloud.version>Greenwich.SR1</spring-cloud.version>
    </properties>

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

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </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>

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

</project>

启动类

package com.hht.eurekaserver;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;

@SpringBootApplication
@EnableEurekaServer
public class EurekaServerApplication {

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

}

配置文件

spring.application.name=spring-cloud-eureka-server
server.port=12345

eureka.client.register-with-eureka=false
eureka.client.fetch-registry=false
eureka.client.service-url.defaultZone=\
  http://localhost:${server.port}/eureka

注意单节点情况:

eureka.client.register-with-eureka=false

eureka.client.fetch-registry=false

启动成功后 访问 http://localhost:12345/

第二步,搭建eureka client端部分,包括服务注册、发现和使用,整体结构如下图

user-api模块用来定义接口

package com.hht.user.domain;

/**
 * @author hht
 * @ClassName User
 * @Description TODO
 * @Date 2019/4/30 15:50
 * @VERSION 1.0
 */
public class User {
    private Long id;
    private String name;

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}
package com.hht.user.service;

import com.hht.user.domain.User;
import org.springframework.stereotype.Service;

import java.util.Collection;

public interface UserService {
    /**
     * 保存用户
     *
     * @param user
     * @return 如果保存成功的话,返回<code>true</code>,
     * 否则返回<code>false</code>
     */
    boolean save(User user);

    /**
     * 查询所有的用户对象
     *
     * @return 不会返回<code>null</code>
     */
    Collection<User> findAll();
}

user-service-consumer模块用来模拟服务发现和使用

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>eureka-client</artifactId>
        <groupId>com.hht</groupId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>user-service-consumer</artifactId>

    <dependencies>
        <dependency>
            <groupId>com.hht</groupId>
            <artifactId>user-api</artifactId>
            <version>${project.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>
    </dependencies>

</project>
# 应用名称
spring.application.name=user-service-client
server.port=8080

# Eureka 服务器地址
eureka.client.serviceUrl.defaultZone= http://localhost:12345/eureka
eureka.instance.prefer-ip-address=true
eureka.instance.ip-address=192.168.1.160
@SpringBootApplication
@EnableDiscoveryClient
public class UserConsumerApplication {
    public static void main(String[] args) {
        SpringApplication.run(UserConsumerApplication.class,args);
    }
}

实现接口类,通过restTemplate(实验,一般生产环境有替代方案)

package com.hht.service;

import com.hht.user.domain.User;
import com.hht.user.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;

import java.util.Collection;

/**
 * @author hht
 * @ClassName com.hht.service.UserServiceProxy
 * @Description TODO
 * @Date 2019/4/30 16:16
 * @VERSION 1.0
 */
@Service
public class UserServiceProxy implements UserService {
    private static final String PROVIDER_SERVER_URL_PREFIX = "http://user-service-provider";

    /**
     * 通过 REST API 代理到服务器提供者
     */
    @Autowired
    private RestTemplate restTemplate;

    @Override
    public boolean save(User user) {
        User returnValue =
                restTemplate.postForObject(PROVIDER_SERVER_URL_PREFIX + "/user/save", user, User.class);
        return returnValue != null;
    }

    @Override
    public Collection<User> findAll() {
        return restTemplate.getForObject(PROVIDER_SERVER_URL_PREFIX + "/user/list", Collection.class);
    }
}

user-service-provider模块用来模拟服务提供方

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>eureka-client</artifactId>
        <groupId>com.hht</groupId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>user-provider</artifactId>

    <dependencies>
        <dependency>
            <groupId>com.hht</groupId>
            <artifactId>user-api</artifactId>
            <version>${project.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-web</artifactId>
            <version>5.1.9.RELEASE</version>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-web</artifactId>
            <version>5.1.9.RELEASE</version>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>
    </dependencies>
</project>
# 应用名称
spring.application.name=user-service-provider
# Eureka Client 端口
server.port=8081
# Eureka 服务器地址
eureka.client.serviceUrl.defaultZone= http://localhost:12345/eureka
eureka.instance.prefer-ip-address=true
eureka.instance.ip-address=192.168.1.160

接口实现类,业务的真实逻辑

package com.hht.service;

import com.hht.respository.UserRespository;
import com.hht.user.domain.User;
import com.hht.user.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.Collection;


@Service
public class UserServiceImpl implements UserService {


    @Autowired
    private UserRespository respository;

    @Override
    public boolean save(User user) {
        return respository.save(user);
    }

    @Override
    public Collection<User> findAll() {
        return respository.findAll();
    }
}

到此结束:整体逻辑为,两个client 都注册到了 server端,通过访问服务名字+方法调用另一个服务 附加:一般生产环境需要高可用 只要修改eureka server的配置文件,启动多个即可

eureka.client.register-with-eureka=false  #去掉
eureka.client.fetch-registry=false        #去掉
eureka.client.service-url.defaultZone=\   #填写除自己外的,其它server节点地址
  http://localhost:${server.port}/eureka

测试代码地址:https://gitee.com/huhaitao/spring_cloud_test/tree/master/eureka

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • spring cloud zuul 集成 spring config、eureka 实现动态路由

    https://my.oschina.net/haitaohu/blog/3104975 服务注册中心

    海涛
  • Spring Cloud Eureka如何解决服务上下线延时过长问题

    1)中小型的项目建议关闭自我保护(eureka.server.enableSelfPreservation=false)

    海涛
  • ThreadLocal源码阅读

    每个线程独有一个 Map,Map里的存储结构为 Entry <ThreadLocal,Object> 数组

    海涛
  • springCloud - 1- 服务的注册与发现 Eureka

    一 、在 springcloud 中 eureka 的作用 :服务注册、服务发现 。

    微风-- 轻许--
  • 服务注册与发现---eureka

    eureka简介:云端服务发现,一个基于 REST 的服务,用于定位服务,以实现云端中间层服务发现和故障转移。 话不多说直接上代码 首先新建一个springcl...

    dalaoyang
  • 使用Spring Cloud搭建服务注册中心

    创建一个普通的Spring Boot工程.首先我们需要创建一个普通的Spring Boot工程,命名为eureka-server,普通到什么程度呢?就是一个st...

    一觉睡到小时候
  • 服务 Docker 化

    Docker的出现让容器化技术得以普及,更快的部署和维护与Spring Cloud的结合,能让我们不再像以前一样为了某一个模块的增加而服务器上大动干戈,还需要考...

    程序员果果
  • Spring Cloud(1)——服务注册中心

    Eureka是一个云端服务发现,一个基于 REST 的服务,用于定位服务,以实现云端中间层服务发现和故障转移。用它我们可以实现服务注册与发现功能

    会跳舞的机器人
  • SpringBoot+Mybatis集成搭建

    本博客介绍一下SpringBoot集成Mybatis,数据库连接池使用alibaba的druid,使用SpringBoot微框架虽然集成Mybatis之后可以不...

    用户1208223
  • spring-boot之简单定时任务

    首先是pom.xml依赖: <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http...

    用户1141560

扫码关注云+社区

领取腾讯云代金券