spring cloud微服务example 入门第一个例子

news2024/11/25 3:23:28

新建Maven工程

删除src目录,修改poml.xml

<modelVersion>4.0.0</modelVersion>

<groupId>org.example</groupId>
<artifactId>SpringCloud_example</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>pom</packaging>

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.3.0.RELEASE</version>
</parent>

<properties>
    <maven.compiler.source>8</maven.compiler.source>
    <maven.compiler.target>8</maven.compiler.target>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <spring.cloud-version>Hoxton.SR8</spring.cloud-version>
</properties>

<dependencies>
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <version>1.18.18</version>
        <scope>provided</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>

Eureka注册中心

File -> New -> Module

添加依赖

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

启动类

package org.example;

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);
    }
}

配置文件application.yml

server:
  port: 9000

spring:
  application:
    name: eureka-server

eureka:
  instance:
    hostname: eureka9000.com
  client:
    register-with-eureka: false
    fetch-registry: false
    service-url:
      defaultZone: "https://${eureka.instance.hostname}:${server.port}/eureka/"

common微服务

File -> New -> Module

产品类

package org.example.common.entity;

import lombok.Data;

@Data
public class Product {
    private Long id;
    private String name;
}

修改父pom.xml

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.example</groupId>
            <artifactId>common</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
    </dependencies>
</dependencyManagement>

产品微服务

File -> New -> Module

添加依赖

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

    <dependency>
        <groupId>org.example</groupId>
        <artifactId>common</artifactId>
    </dependency>
</dependencies>

配置文件application.yml

server:
  port: 9010

spring:
  application:
    name: product-service

eureka:
  client:
    service-url:
      defaultZone: http://localhost:9000/eureka/
  instance:
    prefer-ip-address: true
    instance-id: ${spring.application.name}:${server.port}
    lease-renewal-interval-in-seconds: 5
    lease-expiration-duration-in-seconds: 10

启动类

package org.example;

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

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

controller类

package org.example.controller;

import org.example.common.entity.Product;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/product")
public class ProductController {
    @GetMapping("/{id}")
    public Product findById(@PathVariable Long id) {
        Product product = new Product();
        product.setId(id);
        product.setName("product test");
        return product;
    }
}

订单微服务

File -> New -> Module

依赖

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

    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-openfeign</artifactId>
    </dependency>

    <dependency>
        <groupId>org.example</groupId>
        <artifactId>common</artifactId>
    </dependency>
</dependencies>

配置文件

server:
  port: 9020

spring:
  application:
    name: order-service

eureka:
  client:
    service-url:
      defaultZone: http://localhost:9000/eureka/
  instance:
    hostname: localhost
    prefer-ip-address: true
    lease-renewal-interval-in-seconds: 5
    lease-expiration-duration-in-seconds: 10

product-service:
  ribbon:
    ConnectTimeout: 250
    ReadTimeout: 1000
    OkToRetryOnAllOperations: true
    MaxAutoRetriesNextServer: 1
    MaxAutoRetries: 1

启动类

package org.example;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.cloud.openfeign.EnableFeignClients;

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

feign接口

package org.example.controller;

import org.example.common.entity.Product;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;

@Component
@FeignClient(value = "product-service")
public interface ProductFeign {
    @GetMapping(value = "/product/{id}")
    Product findById(@PathVariable Long id);
}

controller类

package org.example.controller;

import org.example.common.entity.Product;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/order")
public class OrderController {
    @Autowired
    ProductFeign productFeign;

    @GetMapping("/{id}")
    public Product buy(@PathVariable Long id) {
        Product product = productFeign.findById(id);
        return product;
    }
}

网关微服务

File -> New -> Module

添加依赖

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

启动类

package org.example;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

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

配置文件

server:
  port: 9030

spring:
  application:
    name: api-gateway
  cloud:
    gateway:
      routes:
        - id: product-service
          uri: lb://product-service
          predicates:
            - Path=/product/**
        - id: order-service
          uri: lb://order-service
          predicates:
            - Path=/order/**

eureka:
  client:
    service-url:
      defaultZone: http://localhost:9000/eureka/
  instance:
    prefer-ip-address: true
    instance-id: ${spring.cloud.client.ip-address}:${server.port}

启动eureka-server,product-service,order-service和api-gateway微服务,打开http://localhost:9030/order/1,返回{"id":1,"name":"product test"}

github:GitHub - JJJ2018/SpringCloud_example

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1672729.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

24年湖南三支一扶报名详细流程(电脑报名)

24年湖南三支一扶报名详细流程&#xff08;电脑报名&#xff09; #湖南三支一扶 #湖南三支一扶考试 #三支一扶报名照片 #三支一扶考试 #三支一扶 #湖南省三支一扶

【AI大模型应用开发】LATS:比ToT和ReAct更强大的大模型思维框架

大家好&#xff0c;我是 同学小张&#xff0c;持续学习C进阶知识和AI大模型应用实战案例&#xff0c;持续分享&#xff0c;欢迎大家点赞关注&#xff0c;共同学习和进步。 我们在大模型中常听说CoT&#xff08;思维链&#xff09;、ToT&#xff08;思维树&#xff09;&#xff…

AI视频教程下载:基于OpenAl、LangChain、 Replicate开发AI应用程序

欢迎来到令人兴奋的 AI 应用世界&#xff01;在这门课程中&#xff0c;你将学习到创建一个能够与用户互动、理解自然语言、处理音频输入&#xff0c;甚至分析图像的真正智能应用所需的技能和技术。 AI 工具和技术 你将获得使用几个知名 AI API 和技术的实际经验。这些行业领先…

【数据结构】栈和队列OJ面试题

20. 有效的括号 - 力扣&#xff08;LeetCode&#xff09; 思路&#xff1a;由于C语言没有栈的接口&#xff0c;所以我们需要自己造一个“模子”。我们直接copy之前的实现的栈的接口就可以了&#xff08;可以看我之前的博客【数据结构】栈和队列-CSDN博客copy接口&#xff09;&…

VTK图形算法API:vtkSphereSource,球几何数据

大家好&#xff0c;我是先锋&#xff0c;专注于AI领域和编程技术分享&#xff0c;在这里定期分享计算机编程知识&#xff0c;AI应用知识&#xff0c;职场经验&#xff1b; 本系列介绍VTK图像算法API&#xff0c;后续会介绍VTK项目实践应用&#xff0c;关注我&#xff0c;不错过…

开源aodh学习小结

1 介绍 aodh是openstack监控服务&#xff08;Telemetry&#xff09;下的一个模块&#xff0c;telemetry下还有一个模块ceilometer OpenStack Docs: 2024.1 Administrator Guides Get Started on the Open Source Cloud Platform - OpenStack Telemetry - OpenStack 1.1 代码仓…

01-02-3

1、线性表 a.定义&#xff1a; 有n&#xff08;n>0&#xff09;个相同类型的元素组成的有序集合。 数组是线性表的一种。通常用数组实现。 b.线性表的顺序存储 b-1&#xff1a;顺序表结构体的定义 顺序表是一个结构体变量。结构体内部有两个数据&#xff1a;一个用于存…

Nature 综述(IF=88):微生物群落和土壤性质之间的相互作用

随着社会的发展&#xff0c;环境污染和自然资源的消耗日益严重&#xff0c;土壤生态系统的健康状况备受关注。然而&#xff0c;当前研究领域存在一个问题&#xff0c;即在研究土壤微生物群落结构的同时&#xff0c;忽略了微生物对土壤环境的影响。本文旨在探讨微生物如何通过生…

牛客热题:旋转数组的最小数字

&#x1f4df;作者主页&#xff1a;慢热的陕西人 &#x1f334;专栏链接&#xff1a;力扣刷题日记 &#x1f4e3;欢迎各位大佬&#x1f44d;点赞&#x1f525;关注&#x1f693;收藏&#xff0c;&#x1f349;留言 文章目录 牛客热题&#xff1a;旋转数组的最小数字题目链接方法…

二叉树的前序、中序、后序遍历

二叉树的前序、中序、后序 1.二叉树的前序遍历 题目&#xff1a; 二叉树的前序遍历 给你二叉树的根节点 root &#xff0c;返回它节点值的 前序 遍历。 示例 1&#xff1a; 输入&#xff1a;root [1,null,2,3] 输出&#xff1a;[1,2,3]示例 2&#xff1a; 输入&#xff…

​​​【收录 Hello 算法】第 6 章 哈希表

目录 第 6 章 哈希表 本章内容 第 6 章 哈希表 Abstract 在计算机世界中&#xff0c;哈希表如同一位聪慧的图书管理员。 他知道如何计算索书号&#xff0c;从而可以快速找到目标图书。 本章内容 6.1 哈希表6.2 哈希冲突6.3 哈希算法6.4 小结

UML快速入门篇

目录 1. UML概述 2. 类的表示 2.1. 类的表示 2.2. 抽象类的表示 2.3. 接口的表示 3. 类的属性&#xff0c;方法&#xff0c;访问权限的表示 3.1. 类的属性 3.2. 类的方法 3.3. 类的权限 4. 类的关联 4.1. 单向关联 4.2. 双向关联 4.3. 自关联 4.4. 类的聚合 4.5.…

LeetCode题练习与总结:不同的二叉搜索树Ⅱ--95

一、题目描述 给你一个整数 n &#xff0c;请你生成并返回所有由 n 个节点组成且节点值从 1 到 n 互不相同的不同 二叉搜索树 。可以按 任意顺序 返回答案。 示例 1&#xff1a; 输入&#xff1a;n 3 输出&#xff1a;[[1,null,2,null,3],[1,null,3,2],[2,1,3],[3,1,null,nul…

通过GRE隧道实现OSPF、BGP、IS-IS的套接使用

正文共&#xff1a;999 字 9 图&#xff0c;预估阅读时间&#xff1a;1 分钟 书接上文&#xff08;专线入云场景能否配置动态路由协议&#xff1f;&#xff09;&#xff0c;我们发现通过一定的配置&#xff0c;具体就是组合使用IBGP和静态路由&#xff0c;在使用云专线接入到资…

科技查新中的工法查新点如何确立与提炼?案例讲解!

按《工程建设工法管理办法》( 建 质&#xff3b;2014&#xff3d;103 号) &#xff0c;工法&#xff0c;是指以工程为对象&#xff0c;以工艺为核心&#xff0c;运用系 统工程原理&#xff0c;把先进技术和科学管理结合起来&#xff0c;经过一定工程实践形成的综合配套的施工方…

【go项目01_学习记录11】

操作数据库 1 文章列表2 删除文章 1 文章列表 &#xff08;1&#xff09;先保证文章已经有多篇&#xff0c;可以直接在数据库中添加&#xff0c;或者访问链接: localhost:3000/articles/create&#xff0c;增加几篇文章。 &#xff08;2&#xff09;之前设置好了articles.ind…

移动端自动化测试工具 Appium 之自定义报告

文章目录 一、背景二、具体实现1、保存结果实体2、工具类3、自定义报告监听类代码4、模板代码4.1、report.vm4.2、执行xml 三、总结 一、背景 自动化测试用例跑完后报告展示是体现咱们价值的一个地方咱们先看原始报告。 上面报告虽然麻雀虽小但五脏俱全&#xff0c;但是如果用…

JavaScript 进阶(一)

一、作用域 1. 局部作用域 &#xff08;1&#xff09;函数作用域 、 &#xff08;2&#xff09;块作用域 2. 全局作用域 3. 作用域链 g 作用域可以访问 f 作用域&#xff08;子访问父&#xff09;&#xff0c;但是 f 作用域&#xff0c;不能访问 g 作用域&#xff08;父…

[数据集][图像分类]杂草分类数据集17509张9类别

数据集格式&#xff1a;仅仅包含jpg图片&#xff0c;每个类别文件夹下面存放着对应图片 图片数量(jpg文件个数)&#xff1a;17509 分类类别数&#xff1a;9 类别名称:["chineseapple","lantana","negatives","parkinsonia","part…

经典面试题---环形链表

1. 环形链表1. - 力扣&#xff08;LeetCode&#xff09; 要解决这道题&#xff0c;我们首先要挖掘出带环的链表与不带环的链表之间的差别。 以此&#xff0c;才能设计出算法来体现这种差别并判断。 二者最突出的不同&#xff0c;就是不带环的链表有尾结点&#xff0c;也就是说…