服务的注册与发现
# 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">
<modelVersion>4.0.0</modelVersion>
<!--给这个父亲工程设置个爹-->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<!-- <version>1.4.1.RELEASE</version>-->
<version>2.1.3.RELEASE</version>
</parent>
<groupId>org.example</groupId>
<artifactId>com-xufei-springCloud-parent</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>pom</packaging>
<url>http://www.example.com</url>
<modules>
<module>com-xufei-springcloud-eureka01</module>
</modules>
<!--给这个父亲工程设置个依赖版本的管理-->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Camden.SR1</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
</project>
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
28
29
30
31
32
33
34
35
36
37
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
28
29
30
31
32
33
34
35
36
37
# 2、注册中心Eureka的使用
# 2.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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.example</groupId>
<artifactId>com-xufei-springCloud-parent</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<groupId>com.xufei.springcloud</groupId>
<artifactId>com-xufei-springcloud-eureka01</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>com-xufei-springcloud-eureka01</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka-server</artifactId>
</dependency>
<!--这个是 eureka 用来配置用户名和密码的时候使用的包-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
# 2.2、编写配置文件
#使能安全认证
security.basic.enabled=true
#登陆Eureka的用户名和密码
security.user.name=xiaofeifei
security.user.password=123
#Eureka的端口默认是8761
server.port=8761
#是否要将自己这个服务 注册到Eureka上去(自己一般不注册自己)
eureka.client.register-with-eureka=false
#是否获取注册表信息 一般设置为false
eureka.client.fetch-registry=false
#这个表示的意思是:Eureka 服务端的地址是多少
#eureka.client.service-url.defaultZone: http://xiaofeifei:123@euerka222:8762/eureka,http://xiaofeifei:123@euerka333:8763/eureka
eureka.client.service-url.defaultZone: http://xiaofeifei:123@localhost:8761/eureka
#eureka.instance.hostname=eureka111
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 2.3、编写启动工程
@SpringBootApplication
@EnableEurekaServer
public class Application {
public static void main(String[] args){
SpringApplication.run(Application.class,args);
}
}
1
2
3
4
5
6
7
2
3
4
5
6
7
页面访问 http://127.0.0.1:8761/
# 3、服务的提供者
# 3.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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.example</groupId>
<artifactId>com-xufei-springCloud-parent</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<groupId>com.xufei.springcloud</groupId>
<artifactId>cd-2001-springcloud-user-server</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>cd-2001-springcloud-user-server</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--这个是提供者 所需要的包-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
<!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.12</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
# 3.2、编写配置文件
#服务的端口
server.port=8081
#这个表示的意思是:Eureka这个服务端的地址是多少(主要是告诉服务的提供者注册中心的地址)
eureka.client.service-url.defaultZone: http://xiaofeifei:123@localhost:8761/eureka
#这个意思是是否将localhost这种翻译成ip地址
eureka.instance.prefer-ip-address=true
#application实例的id的构成
eureka.instance.instance-id=${spring.application.name}:${spring.cloud.client.ipAddress}:${spring.application.instance_id:${server.port}}
#给服务取名字
spring.application.name=user-server
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
# 3.3、编写启动工程
@SpringBootApplication
@EnableEurekaClient //这个就表示是服务的提供者
public class UserServerApplication {
public static void main(String[] args){
SpringApplication.run(UserServerApplication.class,args);
}
}
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
# 3.4、准备Controller
@RestController
public class UserController {
/**
* 登陆的这个方法
* @return
*/
@RequestMapping("login")
public Object login(){
System.out.println("小飞飞到此一游...");
return "登陆成功";
}
}
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
# 4、服务的消费者
项目参考 cd-xufei-springcloud-chanel-server 模块
# 4.1、导包
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<!--接下来导入服务的Eureka的包和服务的发现的包-->
<!--服务的发现的包-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-feign</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
<!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.12</version>
</dependency>
<!--服务的降级和熔断的功能包-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-hystrix</artifactId>
</dependency>
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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# 4.1、配置文件
#给当前的服务配置端口
server.port=8080
#给当前的服务取名字
spring.application.name=chanel-server
#Eureka的服务器的地址(主要是告诉服务的提供者注册中心的地址)因为消费者需要从注册中心获取服务列表
eureka.client.service-url.defaultZone: http://xiaofeifei:123@localhost:8761/eureka
#开启这个服务的降级
feign.hystrix.enabled=true
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
# 4.2、编写controller
@RestController
public class ChanelController {
@Autowired
private IUserService userService;
private Logger logger = LoggerFactory.getLogger(ChanelController.class);
/**
* 调用登陆的方法
* @return
*/
@RequestMapping("/login1")
//getFallback 这个定义的是controller出现异常执行的自定义方法 就是服务的熔断,服务的降级是远程服务器出现问题
@HystrixCommand(fallbackMethod = "getFallback") //服务的熔断和降级使用这个注解
public Object login1(){
logger.info("进入了 login1 方法");
//这里我们要调用user-server(服务的提供者)中的方法
User user = userService.login();
// int k=1/0;
System.out.println("调用服务返回的值是:"+user);
return user;
}
/**
* 测试服务的熔断
* @return
*/
public Object getFallback() {
System.out.println("这里是服务熔断的方法...");
return new User(2,"服务出现熔断了","123") ;
}
/**
* 调用通过id查询用户的方法
* @return
*/
@RequestMapping("findUserById")
public Object findUserById(){
logger.info("执行了findUserById方法");
//到这里我们要调用user-server中的方法
User user = userService.findUserById(1);
System.out.println("调用服务返回的值是:"+user);
return "这里是执行成功的...";
}
/**
* 注册的方法
* @return
*/
@RequestMapping("register")
public Object register(){
logger.info("执行了register方法");
//到这里我们要调用user-server中的方法
User user = userService.register("大飞飞","1234");
System.out.println("调用服务返回的值是:"+user);
return "执行成功啦...";
}
/**
* 修改用户
* @return
*/
@RequestMapping("update")
public Object update(){
logger.info("执行了update方法");
//到这里我们要调用user-server中的方法
User user = userService.update(new User(2,"铁蛋","234"));
System.out.println("调用服务返回的值是:"+user);
return "执行成功啦...";
}
}
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
# 4.3、编写service
fallbackFactory = MyFallBackfactory.class 这个就是服务降级的一个配置
服务的发现,value=zuul-server 的意思是(服务提供者)的服务的名称
1
2
2
//@FeignClient(value = "zuul-server",fallbackFactory = MyFallBackfactory.class)
@FeignClient(value = "user-server")
public interface IUserService {
/**
* 登陆的这个方法
* @return
*/
//@RequestMapping("/feifei/zuul-proxy/login")
@RequestMapping(value = "/login")
@ResponseBody
User login();
/**
* 通过id查找用户
* @param id
* @return
*/
//@RequestMapping(value = "/feifei/zuul-proxy/findUserById")
@RequestMapping(value = "/findUserById")
@ResponseBody
User findUserById(@RequestParam("id") int id);
/**
* 注册的接口
* @param userName
* @param passWord
* @return
*/
@RequestMapping(value = "/feifei/zuul-proxy/register")
@ResponseBody
User register(@RequestParam("userName") String userName,@RequestParam("passWord") String passWord);
/**
* 修改用户
* @param user
* @return
*/
@ResponseBody
@RequestMapping(value = "/feifei/zuul-proxy/update",method = RequestMethod.POST)
User update(@RequestBody User user);
}
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
28
29
30
31
32
33
34
35
36
37
38
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
28
29
30
31
32
33
34
35
36
37
38
# 4.4、编 写启动程序
@SpringBootApplication
//消费者调用服务的提供者的接口除了需要再业务接口添加 @FeignClient 注解之外还需要添加以下两个注解
@EnableFeignClients
@EnableDiscoveryClient
@EnableCircuitBreaker //启动这个熔断器 服务的熔断和降级使用这个注解
public class ChanelServiceApplication {
public static void main(String[] args){
SpringApplication.run(ChanelServiceApplication.class,args);
}
}
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
启动项目访问改模块接口,测试调用服务的提供者的接口
127.0.0.1:8080/login1
最近更新: 2025/07/30, 15:37:56