使用Idea构建SpringCloud项目(图文详解+简单易懂)


一。SpringCloud项目简介

1.SpringCloud项目可划为三个角色,一个是服务的注册与发现中心(Eureka ),一个是服务的提供方(Provider),最后一个是服务的消费方(Consumer),首先我们要保证Eureka能够正常的运行,让Provider在Eureka上注册服务,然后Consumer就能够在Eureka上发现Provider服务,并可以通过RPC远程调用的方式对Provider服务进行调用,这就是一个简单的微服务结构模型。结构图如下所示:

在这里插入图片描述
如果你还没有听懂的话,再举一个例子来说明吧:

网购现如今已经变成了我们日常生活中不可或缺的部分,我们可以在某些购物平台上根据自己的需要来进行购买。在这个例子中,我们可以把某购物平台类比成一个Eureka,把商家类比成一个Provider,把买家类比成一个Consumer。只有当购物平台正常运作,且商家在该平台进行注册的情况下,买家才能够在该购物平台中搜索到相关商家的产品信息,并进行购买消费。结构图如下所示:

在这里插入图片描述

示例项目结构如下:

  1. springcloud_demo:项目名称
  2. eureka-server:服务注册与发现子模块
  3. provider:服务提供子模块
  4. consumer:服务消费子模块

二。构建步骤

1.构建一个maven项目:

在这里插入图片描述

在这里插入图片描述
输入项目名称以及所在位置,这里我是用springcloud_demo作为项目名称:

在这里插入图片描述

删除新建项目下的src文件夹,因为我们只需要新建项目的架子,让其存放其他的子服务:

在这里插入图片描述
2.新建Eureka注册中心子模块:eureka-server

在这里插入图片描述
选择Spring Initializr:

在这里插入图片描述
填写项目名称eureka-server,选择java版本,这里我选的是java8版本:

在这里插入图片描述
选择Spring Cloud Discovery,勾选Eureka Server:

在这里插入图片描述
确认子模块名称以及所在位置:

在这里插入图片描述

导入依赖:

在这里插入图片描述

创建成功效果图:

在这里插入图片描述
3.创建提供服务子模块:provider,除了Spring Cloud Discovery中勾选Eureka Discovery Client外,创建方式与创建eureka-server子模块方式一致

在这里插入图片描述

4.创建服务消费子模块:consumer,除了Spring Cloud Discovery中勾选Eureka Discovery Client外,创建方式与创建eureka-server子模块方式一致
在这里插入图片描述

5.构建完成后项目结构如下:

在这里插入图片描述

三。服务调用

1.eureka-server子模块:

在该启动类中加上@EnableEurekaServer注解,声明为注册中心:

package com.example.eurekaserver;

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


//启动类标识
@SpringBootApplication
//声明为注册中心
@EnableEurekaServer
public class EurekaServerApplication {

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

}


把resources下的application.properties文件名改为application.yml(快捷键:shift+f6),并添加以下内容:

server:
  #运行端口
  port: 8888
eureka:
  instance:
    #注册ip
    hostname: localhost
  client:
    #禁止自己当做服务注册
    register-with-eureka: false
    #屏蔽注册信息
    fetch-registry: false
    #注册url
    serviceUrl:
      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/

2.provider子模块:

在该启动类中加上@EnableEurekaClient注解,声明为注册服务:

package com.example.provider;

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

//启动类标识
@SpringBootApplication
//声明为注册服务
@EnableEurekaClient
public class ProviderApplication {

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

}

把resources下的application.properties文件名改为application.yml(快捷键:shift+f6),并添加以下内容:

eureka:
  client:
    serviceUrl:
      #服务注册地址
      defaultZone: http://localhost:8888/eureka/
server:
  #运行端口
  port: 8763
spring:
  application:
    #服务注册名称
    name: service-provider

新建controller包,并新建控制器类TestController示例:

package com.example.provider.controller;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @Description:服务端控制器
 * @Author :zks
 * @Date :16:07 2020/8/27
 */
@RequestMapping("test")
@RestController
public class TestController {

    @RequestMapping("getName")
    public String getName(){
        return "SpringCloud!";
    }
}

完成后子模块结构如下:

在这里插入图片描述

3.consumer子模块:

在该启动类中加上@EnableEurekaClient注解,声明为注册服务:

package com.example.consumer;

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

//启动类标识
@SpringBootApplication
//声明为注册服务
@EnableEurekaClient
public class ConsumerApplication {

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

}

把resources下的application.properties文件名改为application.yml(快捷键:shift+f6),并添加以下内容:

eureka:
  client:
    serviceUrl:
      #服务注册地址
      defaultZone: http://localhost:8888/eureka/
server:
  #运行端口
  port: 8764
spring:
  application:
    #服务注册名称
    name: service-consumer

调用方式一:使用RestTemplate调用注册子模块接口方法

新建service包,并新建一个ConsumerService类:

package com.example.consumer.service;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;

/**
 * @Description:使用RestTemplate调用注册子模块接口方法
 * @Author :zks
 * @Date :16:14 2020/8/27
 */
@Service
public class ConsumerService {

    @Autowired
    private RestTemplate restTemplate;

    public String getName() {
        //调用子模块接口地址
        String name = restTemplate.getForObject("http://service-provider/test/getName", String.class);
        return name;
    }
}

在启动类中加入以下代码,把RestTemplate注入到Spring容器中:

//把RestTemplate注入到Spring容器中(不然会找不到该RestTemplate类)
    @Bean
    @LoadBalanced
    RestTemplate restTemplate() {
        return new RestTemplate();
    }

调用方式二:使用@FeignClient注解调用注册子模块接口方法

在service包下新建一个ConsumerService1类:

package com.example.consumer.service;

import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;

/**
 * @Description:使用@FeignClient注解调用注册子模块接口方法
 * @Author :zks
 * @Date :16:31 2020/8/27
 */
//注册子模块名称
@FeignClient(value = "service-provider")
public interface ConsumerService1 {

    //接口访问地址
    @GetMapping("test/getName")
    public String getName1();

}


在启动类中加入@EnableFeignClients注解,把调用注册子模块接口引入到Spring容器中:

//把调用注册子模块接口引入到Spring容器中(不加此注解会出现找不到@FeignClient修饰的接口)
@EnableFeignClients

含有两种调用方式的启动类:

package com.example.consumer;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate;

//启动类标识
@SpringBootApplication
//声明为注册服务
@EnableEurekaClient
//把调用注册子模块接口引入到Spring容器中(不加此注解会出现找不到@FeignClient修饰的接口)
@EnableFeignClients
public class ConsumerApplication {

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

    //把RestTemplate注入到Spring容器中(不然会找不到该RestTemplate类)
    @Bean
    @LoadBalanced
    RestTemplate restTemplate() {
        return new RestTemplate();
    }

}

新建controller包,并新建控制器类ConsumerController

package com.example.consumer.controller;

import com.example.consumer.service.ConsumerService;
import com.example.consumer.service.ConsumerService1;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @Description:消费端控制器
 * @Author :zks
 * @Date :16:18 2020/8/27
 */
@RequestMapping("consumer")
@RestController
public class ConsumerController {

    @Autowired
    private ConsumerService consumerService;

    @Autowired
    private ConsumerService1 consumerService1;

    /**方式一:RestTemplate调用
     * @return
     */
    @RequestMapping("getName")
    public String getName(){
        return consumerService.getName();
    }

    /**
     * 方式二:@FeignClient调用
     * @return
     */
    @RequestMapping("getName1")
    public String getName1(){
        return consumerService1.getName1();
    }


}

完成后子模块结构如下:

在这里插入图片描述
注意,若修改的application.yml文件中含中文注释的话,需要将其编码格式转换成utf-8,要不然可能读取该文件出错,导致子模块启动失败:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

四。服务启动

1.首先启动eureka-server

找到该子模块的启动类,启动该模块:

在这里插入图片描述
启动成功:

在这里插入图片描述
在浏览器中输入:localhost:8888,出现Eureka注册中心管理页面:

在这里插入图片描述

2.然后启动provider-server

找到该子模块的启动类,启动该模块:

在这里插入图片描述
启动成功:

在这里插入图片描述
刷新Eureka注册中心管理页面:

在这里插入图片描述
3.最后启动consumer-server

找到该子模块的启动类,启动该模块:

在这里插入图片描述
启动成功:

在这里插入图片描述
刷新Eureka注册中心管理页面:

在这里插入图片描述

至此相关服务以及全部启动完成。

五。访问消费端接口

1.在浏览器中输入:http://localhost:8764/consumer/getName,成功得到返回结果:

在这里插入图片描述

2.在浏览器中输入:http://localhost:8764/consumer/getName1,成功得到返回结果:

在这里插入图片描述
该demo已上传,有需要的小伙伴可以自行下载:springcloud_demo

### 回答1: 在 IDEA搭建 Spring Cloud 项目可以使用 Spring Initializer 插件来辅助创建。首先需要安装插件,然后在 IDEA 中选择 "New" -> "Project",在弹出的对话框中选择 "Spring Initializer",然后根据需要选择项目的基本信息和依赖。最后点击 "Finish" 即可创建 Spring Cloud 项目。 ### 回答2: 随着微服务架构的普及,Spring Cloud成为了目前比较热门的技术框架,随之而来的是快速搭建一个基于Spring Cloud的微服务项目,本文将介绍如何用Idea搭建Spring Cloud项目。 首先,我们需要准备一些开发工具。在开始编写代码之前,我们需要安装配置一下环境,包括安装JDK、Maven和Idea。在这里,我们选用的是JDK1.8、Maven3和Idea2018。 安装好开发工具后,我们可以开始新建一个Spring Cloud项目。首先在Idea中创建一个新项目,选择Spring Initializr模板。 在第一步中,填写项目基本信息,包括名字、类型、组织、包名、Java版本等信息。这里选择的是Maven项目使用了JDK1.8,使用Spring Boot版本是2.1.2。 在第二步中,选择要使用的依赖。这里面碰到了Spring Cloud的众多组件,你需要根据自己的需要选择相应的组件。这里主要用到的组件是Eureka和Feign。 在第三步中,设置项目存储的路径和相关信息。 在第四步中,Maven会下载一些必要的依赖和插件,如果网络状况良好,这个步骤应该不会出现问题。创建好的项目包含了一些必要的配置文件,比如pom.xml、application.properties/application.yml、Application.java等等。 接下来,我们需要配置Spring Cloud的相关功能。在pom.xml文件中添加Spring Cloud的依赖: ``` <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-server</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> ``` 在application.yml文件中添加相关配置: ``` server: port: 8080 eureka: server: enable-self-preservation: false eviction-interval-timer-in-ms: 4000 instance: lease-renewal-interval-in-seconds: 10 lease-expiration-duration-in-seconds: 30 client: service-url: defaultZone: http://localhost:8080/eureka/ register-with-eureka: true fetch-registry: true feign: hystrix: enabled: true ``` 然后我们可以开始编写自己的业务逻辑。在这里,我们主要讲解一下如何使用Feign进行微服务之间的调用。 在项目中定义一个接口(如UserService): ``` @FeignClient(value = "user-service") public interface UserService { @GetMapping("/user/{id}") User findUserById(@PathVariable(value = "id") int id); } ``` 在调用的地方使用: ``` @Autowired private UserService userService; public User getUser(int id) { return userService.findUserById(id); } ``` 至此,一个Spring Cloud项目搭建完成了。总结一下,我们需要做以下几件事情: 1. 安装开发工具,包括JDK、Maven、Idea。 2. 新建项目,选择Spring Cloud的模板,按照向导填写相应的信息。 3. 配置Spring Cloud的依赖和相关配置。 4. 编写业务逻辑。 当然,这还只是最基础的搭建。在实际的开发中,我们还需要深入了解Spring Cloud的其他组件以及相关的技术原理。 ### 回答3: 随着互联网的快速发展,企业需要不断地迭代和创新才能在激烈的市场竞争中生存下去。为了更好的应对这些挑战,许多企业选择使用基于微服务架构的Spring Cloud搭建项目。 本文将向您介绍如何使用Idea搭建Spring Cloud项目。 首先,为了能够使用Idea搭建Spring Cloud项目,您需要先了解什么是Spring Cloud以及微服务架构。Spring Cloud是一个为微服务架构提供快速开发工具箱的开源项目,它提供了一整套分布式系统解决方案,包括服务注册与发现、配置管理、断路器、智能路由、微代理、分布式消息传递等。微服务架构是一种分布式架构模式,其中的应用程序由多个小型独立的服务组成,这些服务通过API相互通信并协同工作,每个服务都专注于执行单一任务,从而实现系统的高可用、高扩展性和高性能。 接下来,我们开始使用Idea搭建Spring Cloud项目。在使用Idea之前,您需要先下载安装该软件,并配置好Java开发环境和Maven环境。接着,按照以下步骤操作: 1. 创建一个新的Maven项目。 2. 在pom.xml文件中添加Spring Cloud依赖项,例如Spring Boot Starter、Eureka Server、Zuul等。如果您使用的是Spring Cloud Dalston版本,可以在GitHub上找到相应的依赖项。 3. 在src/main/java目录下创建Spring Boot应用程序入口文件。您可以使用注释@SpringBootApplication标记单个类文件或使用@Configuration、@EnableAutoConfiguration和@ComponentScan标记所需类。 4. 创建需要的微服务组件文件,例如Eureka Server、Zuul网关、Feign客户端等。 5. 运行项目并测试微服务架构。启动Eureka Server并注册微服务,然后使用Zuul网关进行负载均衡和路由。 以上就是使用Idea搭建Spring Cloud项目的基本步骤。当然,具体实现还需要根据实际情况进行调整和修改。同时,我们还需要注意遵循微服务架构的设计原则,确保每个组件都专注于执行单一任务,从而实现系统的可靠性和可维护性。
评论 20
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Keson Z

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值