手把手教你使用Idea搭建springcloud项目模块互访

前言:

开发工具:IntelliJ IDEA 2020.1

用到的框架:spring boot 、spring cloud

搭建一套spring cloud, spring boot 多个服务互相调用

需要搭建一个父工程springcloud,一个服务注册中心server,两个微服务cloud-tigong,cloud-xiaofei。

两个微服务均注册到服务注册中心

 

dubbo 与cloud的区别

dubbo由于是二进制的传输,占用带宽会更少

springCloud是http协议传输,带宽会比较多,同时使用http协议一般会使用JSON报文,消耗会更大

dubbo的开发难度较大,原因是dubbo的jar包依赖问题很多大型工程无法解决

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

springcloud的接口协议约定比较自由且松散,需要有强有力的行政措施来限制接口无序升级

dubbo的注册中心可以选择zk,redis等多种,springcloud的注册中心只能用eureka或者自研

 

一.搭建父项目

1.

2.

 

3.

 

 

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

<!-- 我这里已经集成了 子项目 -->

<modules>

<module>server</module>

<module>cloud-xiaofei</module>

<module>cloud-tigong</module>

</modules>

<groupId>com.haiteng</groupId>

<artifactId>springcloud</artifactId>

<version>1.0-SNAPSHOT</version>

<packaging>pom</packaging>

<parent>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-parent</artifactId>

<version>2.4.1</version>

<relativePath/>

</parent>

<properties>

<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>

<java.version>1.8</java.version>

</properties>

</project>

二.搭建server注册中心

1.

 

2.

 

3.

 

4.

 

5.

 

 

定义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 https://maven.apache.org/xsd/maven-4.0.0.xsd">

<modelVersion>4.0.0</modelVersion>



<parent>

<groupId>com.haiteng</groupId>

<artifactId>springcloud</artifactId>

<version>1.0-SNAPSHOT</version>

</parent>

<groupId>com.haiteng</groupId>

<artifactId>server</artifactId>

<version>0.0.1-SNAPSHOT</version>

<name>server</name>

<description>Demo project for Spring Boot</description>



<properties>

<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>

<java.version>1.8</java.version>

<spring-cloud.version>2020.0.0</spring-cloud.version>

</properties>



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



<repositories>

<repository>

<id>spring-milestones</id>

<name>Spring Milestones</name>

<url>https://repo.spring.io/milestone</url>

</repository>

</repositories>



</project>

 

启动加注解@EnableEurekaServer(开启eureka服务)

package com.haiteng.server;



import org.springframework.boot.SpringApplication;

import org.springframework.boot.autoconfigure.SpringBootApplication;

import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;

@SpringBootApplication

@EnableEurekaServer

public class ServerApplication {



public static void main(String[] args) {

SpringApplication.run(ServerApplication.class, args);

}



}

定义配置文件

配置文件改为application.yml

server:
  port: 80

spring:
  application:
    #应用名称(在注册中显示的)
    name: server
eureka:
  client:
    #此客户端是否获取eureka服务器注册表上的注册信息,默认为true
    fetch-registry: false
    #实例是否在eureka服务器上注册自己的信息以供其他服务发现,默认为true,即自己注册自己。
    register-with-eureka: true
    #与Eureka注册服务中心的通信zone和url地址
    serviceUrl:
      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka
  #服务注册中心实例的主机名
  instance:
    hostname: 127.0.0.1
    prefer-ip-address: true
    instance-id: 127.0.0.1:80
  server:
    enable-self-preservation: false
    eviction-interval-timer-in-ms: 10000

(5)测试

 

三.搭建提供者服务

1.

2.

 

3.

 

4.

 

5.

 

6.

定义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 https://maven.apache.org/xsd/maven-4.0.0.xsd">

<modelVersion>4.0.0</modelVersion>

<parent>

<groupId>com.haiteng</groupId>

<artifactId>springcloud</artifactId>

<version>1.0-SNAPSHOT</version>

</parent>

<groupId>com.haiteng.tigong</groupId>

<artifactId>cloud-tigong</artifactId>

<version>0.0.1-SNAPSHOT</version>

<name>cloud-tigong</name>

<description>Demo project for Spring Boot</description>



<properties>

<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>

<java.version>1.8</java.version>

<spring-cloud.version>2020.0.0</spring-cloud.version>

</properties>



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



<repositories>

<repository>

<id>spring-milestones</id>

<name>Spring Milestones</name>

<url>https://repo.spring.io/milestone</url>

</repository>

</repositories>



</project>

 

修改配置文件为application.yml

spring:
  application:
    name: cloud-tigong
server:
  port: 81

eureka:
  client:
    fetch-registry: false
    register-with-eureka: true
    service-url:
      defaultZone: http://localhost:80/eureka
  #服务注册中心实例的主机名
  instance:
    hostname: 127.0.0.1
    prefer-ip-address: true
    instance-id: 127.0.0.1:81

启动类加注解@EnableEurekaClient

package com.haiteng.tigong;



import org.springframework.boot.SpringApplication;

import org.springframework.boot.autoconfigure.SpringBootApplication;

import org.springframework.cloud.netflix.eureka.EnableEurekaClient;



@SpringBootApplication

@EnableEurekaClient

public class CloudTigongApplication {



public static void main(String[] args) {

SpringApplication.run(CloudTigongApplication.class, args);

}



}

测试

 

四.搭建消费者服务

1.

 

2.

 

3.

 

4.

 

5.

 

定义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 https://maven.apache.org/xsd/maven-4.0.0.xsd">

<modelVersion>4.0.0</modelVersion>

<parent>

<groupId>com.haiteng</groupId>

<artifactId>springcloud</artifactId>

<version>1.0-SNAPSHOT</version>

</parent>

<groupId>com.haiteng</groupId>

<artifactId>cloud-xiaofei</artifactId>

<version>0.0.1-SNAPSHOT</version>

<name>cloud-xiaofei</name>

<description>Demo project for Spring Boot</description>



<properties>

<java.version>1.8</java.version>

<spring-cloud.version>2020.0.0</spring-cloud.version>

</properties>



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



<repositories>

<repository>

<id>spring-milestones</id>

<name>Spring Milestones</name>

<url>https://repo.spring.io/milestone</url>

</repository>

</repositories>



</project>

 

修改配置文件为application.yml(可有可无)

server:
  #定义端口号
  port: 82
spring:
  application:
    #定义应用名称,即服务名称
    name: cloud-xiaofei
eureka:
  client:
    service-url:
      defaultZone: http://localhost:80/eureka
  #服务注册中心实例的主机名
  instance:
    hostname: 127.0.0.1
    prefer-ip-address: true
    instance-id: 127.0.0.1:82

 

启动类加注解@EnableEurekaClient

package com.haiteng;



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



public static void main(String[] args) {

SpringApplication.run(CloudXiaofeiApplication.class, args);

}



}

测试

 

在父pom中加上

<modules>

<module>server</module>

<module>cloud-xiaofei</module>

<module>cloud-tigong</module>

</modules>
  •  

五.实现服务之间的调用

1.在cloud-tigong中创建controller包和service包

package com.haiteng.tigong.controller;



import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.web.bind.annotation.GetMapping;

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

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



@RestController

@RequestMapping("/test")

public class TestController {



@GetMapping("/index")

public String getHello(){



return "测试成功";

}

}

(2)测试

 

(3)在cloud-xiaofei中创建controller包和service包

package com.haiteng.controller;



import com.haiteng.service.TestService;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.web.bind.annotation.GetMapping;

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

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



@RestController

@RequestMapping("/test")

public class TestClient {

@Autowired

private TestService testService;



@GetMapping("/getClient")

public String getClient(){

return testService.getProduct();

}

}
package com.haiteng.service;



import org.springframework.cloud.openfeign.FeignClient;

import org.springframework.stereotype.Component;

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



@FeignClient(name = "cloud-tigong",path ="/test" )

@Component

public interface TestService {

@RequestMapping(value = "index")

String getProduct();

}

 

特别注意

在启动类加上注解@EnableFeignClients

 

package com.haiteng;



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



public static void main(String[] args) {

SpringApplication.run(CloudXiaofeiApplication.class, args);

}



}

(4)测试

 

到这里就全部完事了.

如果创建失败,可以和我要做好的包 QQ:75238016

 

猜你喜欢

转载自blog.csdn.net/a1ccwt/article/details/112315788