Springboot搭建微服务案例之Eureka注册中心

这篇具有很好参考价值的文章主要介绍了Springboot搭建微服务案例之Eureka注册中心。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、父工程依赖管理

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

    <groupId>org.mumu</groupId>
    <artifactId>eureka</artifactId>
    <packaging>pom</packaging>
    <version>1.0</version>
    <modules>
        <module>common</module>
        <module>consumer</module>
        <module>springcloud-service-provider</module>
    </modules>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
        <junit.version>4.12</junit.version>
        <log4j.version>1.2.17</log4j.version>
        <mysql.version>5.1.47</mysql.version>
        <lombok.version>1.16.18</lombok.version>
        <druid.version>1.1.16</druid.version>
        <mybatis.spring.boot.version>1.3.0</mybatis.spring.boot.version>
    </properties>
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
                <version>2.2.1.RELEASE</version>
            </dependency>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
                <version>2.2.1.RELEASE</version>
            </dependency>
            <dependency>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-project-info-reports-plugin</artifactId>
                <version>3.0.0</version>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>2.2.2.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>${mysql.version}</version>
                <scope>runtime</scope>
            </dependency>
            <!--        <!- druid->-->
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>druid-spring-boot-starter</artifactId>
                <version>1.1.10</version>
            </dependency>
            <dependency>
                <groupId>org.mybatis.spring.boot</groupId>
                <artifactId>mybatis-spring-boot-starter</artifactId>
                <version>${mybatis.spring.boot.version}</version>
            </dependency>
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>${junit.version}</version>
            </dependency>
        </dependencies>
    </dependencyManagement>

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

</project>

二、搭建公共模块common

放一些pojo类

1. 依赖引入

<?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</artifactId>
        <groupId>org.mumu</groupId>
        <version>1.0</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>
    <artifactId>springcloud-service-common</artifactId>
    <version>1.0</version>
    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.30</version>
        </dependency>
    </dependencies>

</project>

2.实体类


@Data // 省略写get set方法
@NoArgsConstructor //提供无参数的构造函数
@AllArgsConstructor //提供带所有参数的构造函数
public class Payment implements Serializable {

    private long id;
    private String serial;
}

三、搭建服务提供方provider

1.依赖引入

<?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</artifactId>
        <groupId>org.mumu</groupId>
        <version>1.0</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>springcloud-service-provider</artifactId>
    <version>1.0</version>
    <groupId>org.mumu</groupId>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.mumu</groupId>
            <artifactId>springcloud-service-common</artifactId>
            <version>1.0</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
        </dependency>
        <!--mysql-connector-java-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
        <!--jdbc-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <!--eureka-client-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>
    </dependencies>

</project>

2.配置类

server:
  port: 8001 #配置服务端口号
spring:
  application:
    name: service-provider # 配置服务提供方的名称
  datasource:  # 配置连接数据库的基本信息
    driver-class-name: com.mysql.jdbc.Driver   # 驱动
    url: jdbc:mysql://localhost:3306/cloud2023  # 连接数据库的url
    username: root   # 连接数据库的用户名
    password: 123456   # 连接数据库的密码
mybatis:
  config-location: classpath:/mybatis/sqlMapConfig.xml   # 引入mybatis的核心配置文件
  mapper-locations: classpath:/mybatis/mapper/*.xml  # 引入mybatis的映射文件
eureka:
  client:
    register-with-eureka: true # 允许将当前服务注册到eureka注册中心
    fetch-registry: true # 允许当前微服务拉取注册中心中的服务信息
    service-url:
      defaultZone: http://localhost:7001/eureka/,http://localhost:7002/eureka/  # eureka注册中心的地址

3.编写启动类

@SpringBootApplication
@MapperScan(basePackages = "com.xq.dao")
@EnableDiscoveryClient //开启服务发现的功能
public class ProviderApplication {
    public static void main(String[] args) {
        SpringApplication.run(ProviderApplication.class,args);
    }
}

4. 编写业务逻辑

(1)整合mybatis

dao层

public interface PaymentDao {

    //根据id查询payment信息
    public Payment findById(long id);

    //新增payment信息
    public void add(Payment payment);
}

创建dao接口的映射文件还有mybatis的核心配置文件

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="org.mumu.dao.PaymentDao">

    <!--根据id查询payment信息-->
    <select id="findById" parameterType="long" resultType="payment">
        SELECT * FROM `payment` WHERE id = #{id}
    </select>

    <!--新增payment信息-->
    <insert id="add" parameterType="payment">
        INSERT INTO `payment`(`id`,`serial`) VALUES(#{id},#{serial})
    </insert>
</mapper>

配置 MyBatis 的类型别名,简化 MyBatis 映射文件中的配置 

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <!--取别名-->
    <typeAliases>
        <package name="org.mumu.pojo"></package>
    </typeAliases>
</configuration>

(2)Service

@Service
public class PaymentServiceImpl implements PaymentService {

    @Resource
    PaymentDao paymentDao;

    @Override
    public Payment findById(long id) {
        return paymentDao.findById(id);
    }

    @Override
    public void add(Payment payment) {
        paymentDao.add(payment);
    }

    @Override
    public void save(Payment payment) {
        paymentDao.add(payment);
    }
}

5.定义控制器

@RestController
@RequestMapping("provider")
public class PaymentController {
    @Resource
    PaymentService paymentService;
    @Value("${server.port}")
    String port;

    @RequestMapping("findById")
    public Result<Payment> findById(@RequestParam("id") long id){
        try {
            Thread.sleep(3000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        Payment payment = paymentService.findById(id);
        return new Result<>(200,"数据查询成功,当前服务端口号是:" + this.port,payment);
    }
}

四、搭建服务消费方consumer

1.依赖引入

<dependencies>
        <dependency>
            <groupId>org.mumu</groupId>
            <artifactId>springcloud-service-common</artifactId>
            <version>1.0</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <!--eureka-client-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>
    </dependencies>

2.配置类

server:
  port: 80
spring:
  application:
    name: service-consumer
eureka:
  client:
    register-with-eureka: true # 允许将当前服务注册到eureka注册中心
    fetch-registry: true # 允许当前微服务拉取注册中心中的服务信息
    service-url:
      defaultZone: http://localhost:7001/eureka/,http://localhost:7002/eureka/  # eureka注册中心的地址

3.启动类

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

4.注入RestTemplate组件到ioc容器

使用 RestTemplate 这个 Java 客户端组件来实现服务的远程调用。所以我们需要将
RestTemplate 使用 Java 配置类进行注入:
@Configuration
public class MyConfig {

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

}

5.定义控制器

@RestController
@RequestMapping("consumer")
@Slf4j
public class PaymentController {

   @Resource
   RestTemplate restTemplate;


    @RequestMapping("findById/{id}")
    public Result<Payment> findById(@PathVariable("id") long id){
        String url = "http://localhost:8001/provider/findById?id=" + id; //维护服务提供方的ip+端口
        Result result = restTemplate.getForObject(url, Result.class);
        return result;
    }
}

五、搭建服务注册中心

1.引入依赖server

    <dependencies>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>4.0.1</version> <!-- 使用与Tomcat 9.0.29 兼容的版本 -->
        </dependency>
        <!--eureka服务端依赖-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
        </dependency>

        <!--web启动器-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

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

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>
    </dependencies>

2.配置类

这里不需要要进行服务注册,因为这个模块的server模块

负责对其他Client进行服务注册

server:
  port: 7001
# 配置eureka服务端
eureka:
  client:
    register-with-eureka: false  # 禁止自己注册自己
    fetch-registry: false  # 禁止抓取注册中心中的服务信息
    service-url:
      defaultZone: http://localhost:7001/eureka/  # eureka服务端的地址

3.启动类

@SpringBootApplication
@EnableEurekaServer // 标识当前服务是Eurkea服务端
public class EurekaServerApplication {
    public static void main(String[] args) {
        SpringApplication.run(EurekaServerApplication.class,args);
    }
}

六、启动

访问地址:http://localhost:7001

Springboot搭建微服务案例之Eureka注册中心,微服务,spring boot,微服务,eureka文章来源地址https://www.toymoban.com/news/detail-743254.html

到了这里,关于Springboot搭建微服务案例之Eureka注册中心的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Spring Cloud Eureka Service Registry 服务注册中心实践

    作者:禅与计算机程序设计艺术 在分布式微服务架构下,服务发现是保证应用可用的关键组件之一。在Spring Cloud体系中,服务发现中心通过Netflix Eureka实现。 本文将介绍Spring Cloud Eureka服务注册中心的机制、配置及使用方法,并通过实例对Eureka的功能及其局限性进行详细阐述

    2024年02月11日
    浏览(43)
  • 一、开发环境window10微服务注册中心搭建—Eureka

    简述: Eureka 是天生集群的,搭建配置相当简单:不论你有多少的机器部署,只要相互之间指定对方的 注册中心 地址就可以了 ,而多个 Eureka Server 之间是通过复制的方式完成注册服务的同步,遵循AP原则。 优点: 从设计角度来看,Eureka可以说是无懈可击,注册中心、提供者

    2024年02月05日
    浏览(28)
  • 特别详细的Spring Cloud 系列教程1:服务注册中心Eureka的启动

    Eureka已经被Spring Cloud继承在其子项目spring-cloud-netflix中,搭建Eureka Server的方式还是非常简单的。只需要通过一个独立的maven工程即可搭建Eureka Server。  我们引入spring cloud的依赖和eureka的依赖。 注意spring cloud和springboot的版本要对应,不然容易出现各种奇怪的错误。 不知道spr

    2024年04月08日
    浏览(52)
  • 微服务 - Spring Cloud - Eureka Server单机和集群搭建、单机服务注册和集群服务注册

    Eureka 服务管理 Eureka是Netflix开发的服务发现框架,本身是一个基于REST的服务,主要用于定位运行在AWS域中的中间层服务,以达到负载均衡和中间层服务故障转移的目的。 SpringCloud将它集成在其子项目spring-cloud-netflix中,以实现SpringCloud的服务发现功能 Eureka服务注册与发现 Eu

    2024年02月13日
    浏览(31)
  • Spring Cloud Eureka 服务注册和服务发现超详细(附加--源码实现案例--及实现逻辑图)

    这篇文章先讲述一下Eureka的应用场景、代码实现案例,多个服务模块注册到Euraka中,服务之间的调用实现我会再下一篇文章中进行讲解! Eureka主要是做: 注册发现中心 服务注册与发现的组件 说到Eureka不得不提到了CAP,那么什么是CAP原则呢,下面一起来看下! CAP 原则: 又称

    2024年02月15日
    浏览(29)
  • 使用SpringCloud搭建Eureka注册中心

    目录 前言 一、搭建EurekaServer 1、在cloud-demo父工程下,创建子模块 eureka-server。  2、引入eureka依赖 3、给eureka-server模块编写启动类 4、编写配置文件 5、启动服务 二、服务注册  1、引入依赖 2、配置文件 3、启动服务  三、服务发现 1、引入依赖 3、服务拉取 总结          在

    2024年02月04日
    浏览(26)
  • Spring Cloud 之注册中心 Eureka 精讲

    🍓 简介:java系列技术分享(👉持续更新中…🔥) 🍓 初衷:一起学习、一起进步、坚持不懈 🍓 如果文章内容有误与您的想法不一致,欢迎大家在评论区指正🙏 🍓 希望这篇文章对你有所帮助,欢迎点赞 👍 收藏 ⭐留言 📝 🍓 更多文章请点击 Spring Cloud 官网:https://spring.io/proj

    2024年02月12日
    浏览(34)
  • Spring Clould 注册中心 - Eureka,Nacos

     视频地址:微服务(SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式)  微服务涉及的的知识  总结:  邮储的物联网项目实用的是apollo作为配置中心,nocos作为注册中心,feign进行服务间调用   SpringClould 与SpringBoot的版本兼容  clould-demo:demo 提取码:cocf 实现RestTemple也可以通过ht

    2024年02月12日
    浏览(33)
  • 【微服务开篇-RestTemplate服务调用、Eureka注册中心、Nacos注册中心】

     本篇用到的资料: https://gitee.com/Allengan/cloud-demo.git https://gitee.com/Allengan/cloud-demo.git 目录 1.认识微服务 1.1.单体架构 1.2.分布式架构 1.3.微服务 1.4.SpringCloud 1.5.总结 2.服务拆分和远程调用 2.1.服务拆分原则 2.2.服务拆分示例 2.2.1.导入Sql语句 2.2.2.导入demo工程 2.3.实现远程调用案例

    2024年02月08日
    浏览(29)
  • SpringCloud之Eureka注册中心原理及其搭建

    Eureka是Netflix开发的服务发现框架,本身是一个基于REST的服务,主要用于定位运行在AWS域中的中间层服务,以达到负载均衡和中间层服务故障转移的目的。SpringCloud将它集成在其子项目spring-cloud-netflix中,以实现SpringCloud的服务发现功能。 1、Eureka组件 Eureka包含两个组件:Eure

    2024年02月03日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包