IDEA搭建一个Spring Cloud项目

创建一个空的项目

在IDEA中新建一个maven项目,什么都不选,直接next,然后输入项目的名称,点击finish完成。

新建一个服务注册中心模块

Spring cloud中的每一个微服务都是基于Springboot实现的,所以我们要新建一个模块,类型选择为Springboot,

然后 next ,输入名称eureka server,其他保持默认即可。

然后添加我们所需要的依赖,

然后一直next 即可。module创建完成之后,Springboot已经自动为我们生成了Applicaton类,以及application.properties配置文件。我们需要在Application类中添加@EnableEurekaServer注解,来开启eureka-server。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
package com.example.netflixeurekaserver;

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

@SpringBootApplication
@EnableEurekaServer //我们自己添加的
public class NetflixEurekaServerApplication {

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

}

我们需要在application.properties来配置服务注册中心。

1
2
3
4
5
6
7
8
9
10
11
12
server.port=5050
eureka.instance.hostname=localhost
spring.application.name = eureka

#表示是否将自己注册到Eureka Server,默认为true
eureka.client.register-with-eureka=false

#表示是否从Eureka Server获取注册信息,默认true
eureka.client.fetchRegistry = false

#这个地址就是其他服务注册时需要以下的地址。
eureka.client.service-url.defaultZone=http://localhost:5050/eureka/

然后启动程序,在浏览器中输入http://localhost:5050便可以看到注册中心的控制台。

新建一个eureka-client服务

接下来我们新建的module都是一个个的服务,在建立每一个服务时,都需要选择eureka Discovery Client依赖,其他操作与新建eureka-server相同。module名称为eureka-client

一直next 就可以了。完成创建之后,需要在application类添加注解@EnableEurekaClient,如下图所示

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
package com.example.netflixeurekaclient;

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

@SpringBootApplication
@EnableEurekaClient //自己手动添加
public class NetflixEurekaClientApplication {

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

}

编辑配置文件application.properties

1
2
3
4
5
6
#端口号
server.port=5051
#服务名称
spring.application.name=client
#指定服务中心,即上面的eureka-server的uri
eureka.client.service-url.defaultZone=http://localhost:5050/eureka

在启动这个服务之前,需要在pom.xml文件中添加一下依赖,不然无法启动。

1
2
3
4
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>

接下来启动我们的服务,刷新控制台,便可以看见服务注册上来了。

这样一个服务便成功建立了。后面建立的zuul,config 都是类似的过程

新建netflix-zuul服务

需要选择的依赖如下图所示,其他步骤与上面相同。

修改配置文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
package com.example.netflixzuul;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.netflix.zuul.EnableZuulProxy;

@SpringBootApplication
@EnableDiscoveryClient //表示为一个服务
@EnableZuulProxy //开启zuul路由
public class NetflixZuulApplication {

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

}
1
2
3
4
server.port=8080
spring.application.name=zuul
#指定服务中心
eureka.client.service-url.defaultZone=http://localhost:5050/eureka

新建netflix-config服务

后面的 producer/consumer并没有用到这个服务,就只是创建一下。。选择的依赖如下图所示,

配置文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
package com.example.config;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.config.server.EnableConfigServer;

@SpringBootApplication
@EnableConfigServer //config
public class ConfigApplication {

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

}
1
2
3
4
5
6
spring.application.name=config-server
server.port=5053
# Git 仓库位置
spring.cloud.config.server.git.uri=https://github.com/litterboyDeng/spring-cloud-config-example.git
# 仓库路径下相对搜索位置,可配置多个
spring.cloud.config.server.git.search-paths=config

Producer/Consumber实现

具体的请求逻辑为:请求者-->zuul-->consumber-->producer-->consumer-->zuul-->请求者

我们先建立两个服务,名称分别为producer,consumer, 创建步骤与之前新建eureka-client完全一样。记得添加以下依赖

1
2
3
4
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>

procuder

java application类和配置文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
package com.example.producer;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;

@SpringBootApplication
@EnableDiscoveryClient //
public class ProducerApplication {

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

}
1
2
3
4
5
server.port=5060
#名称
spring.application.name=producer
#指定服务中心
eureka.client.service-url.defaultZone=http://localhost:5050/eureka

添加一个controller类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
package com.example.producer;


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

@RestController //
public class ProducerController {

@RequestMapping("/producer/demo")
public String produce(){
return "Hello !This is from producer!";
}
}

它的访问路径为: http://localhost:5060/producer/demo

consumer

配置文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
package com.example.consumer;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;

@SpringBootApplication
@EnableDiscoveryClient //
public class ConsumerApplication {

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

}
1
2
3
4
server.port=5065
spring.application.name=consumer
#制定服务中心
eureka.client.service-url.defaultZone=http://localhost:5050/eureka

添加一个controller类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
package com.example.consumer;


import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

@RestController
public class ConsumerController {

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

@Autowired
private RestTemplate restTemplate;

@RequestMapping("/api/v1/demo/get")
public String consumer(){
//  交给消费者处理
return this.restTemplate.getForObject("http://localhost:5060/producer/demo", String.class);
}

}

上面使用了 RestTemplate这个类,可以请求对应的接口,并获取返回值

zuul

在这里,我们还需要修改zuul路由配置,如下所示

1
2
3
4
5
6
7
8
9
server.port=8080
spring.application.name=zuul
#制定服务中心
eureka.client.service-url.defaultZone=http://localhost:5050/eureka

#交给消费者处理
zuul.routes.consumer.path=/api/v1/demo/get
#先找到consumer对应的uri: http://localhost:5065 ,然后转化为 http://localhost:5065/api/v1/demo/get
zuul.routes.consumer.service-id=consumer

这里,consumber 的访问地址为 http://localhost:5065, 通过在zuul里设置,我们可以直接通过访问

http://localhost:8080/api/v1/demo/get 去访问 consumer,具体的关系如下图所示:

然后启动服务注册中心,zuul , consumer, producer.

在浏览器输入http://localhost:8080/api/v1/demo/get,可以看到以下信息:

到这里,我们的任务基本就算完成了。

打赏
  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!

请我喝杯咖啡吧~

支付宝
微信