场景
SpringCloud中集成Eureka实现服务注册(单机Eureka构建):
SpringCloud中集成Eureka实现服务注册(单机Eureka构建)_霸道流氓气质的博客-CSDN博客
SpringCloud中集成Eureka实现集群部署服务注册与服务提供者:
SpringCloud中集成Eureka实现集群部署服务注册与服务提供者_霸道流氓气质的博客-CSDN博客
SpringCloud中集成Eureka时通过Discovery实现服务发现:
SpringCloud中集成Eureka时通过Discovery实现服务发现_霸道流氓气质的博客-CSDN博客
上面通过Eureka进行服务注册与发现的基础上,如果要将服务注册中心更改为Zookeeper要怎么实现。
注:
博客:
霸道流氓气质的博客_CSDN博客-C#,架构之路,SpringBoot领域博主
关注公众号
霸道的程序猿
获取编程相关电子书、教程推送与免费下载。
实现
1、Zookeeper搭建
Docker中Zookeeper、Kafka的安装与发送和消费消息:
Docker中Zookeeper、Kafka的安装与发送和消费消息_霸道流氓气质的博客-CSDN博客_docker kafka消费
这里是通过docker快速搭建,如果需要其他安装方式自行研究。
搭建成功之后开放服务器上的zookeeper默认的2181端口。
2、服务提供者集成Zookeeper
参考上面新建Eureka客户端的过程,在父模块下新建cloud-provider-payment8004模块
修改pom文件,引入zookeeper所需的依赖
<!-- SpringBoot整合zookeeper客户端 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zookeeper-discovery</artifactId>
</dependency>
其他根据业务引入所需依赖,完整pom如下
<?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">
<parent>
<artifactId>SpringCloudDemo</artifactId>
<groupId>com.badao</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>cloud-provider-payment8004</artifactId>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
</properties>
<dependencies>
<dependency><!-- 引入自己定义的api通用包,可以使用Payment支付Entity -->
<groupId>com.badao</groupId>
<artifactId>cloud-api-commons</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- SpringBoot整合zookeeper客户端 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zookeeper-discovery</artifactId>
</dependency>
</dependencies>
</project>
新建并修改application.yml
#8004表示注册到zookeeper服务器的支付服务提供者端口号
server:
port: 8004
#服务别名----注册zookeeper到注册中心名称
spring:
application:
name: cloud-provider-payment
cloud:
zookeeper:
connect-string: 自己的zookeeper的ip:2181
将这里的ip改为自己的zookeeper的地址
新建主启动类PaymentMain8004,并在启动类上添加@EnableDiscoveryClient注解
package com.badao.springclouddemo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
@SpringBootApplication
@EnableDiscoveryClient //该注解用于向使用consul或者zookeeper作为注册中心时注册服务
public class PaymentMain8004
{
public static void main(String[] args) {
SpringApplication.run(PaymentMain8004.class, args);
}
}
新建controller,并开放接口返回一个UUID
package com.badao.springclouddemo.controller;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.UUID;
@RestController
@Slf4j
public class PaymentController {
@Value("${server.port}")
private String serverPort;
@RequestMapping(value = "/payment/zk")
public String paymentzk()
{
return "springcloud with zookeeper: "+serverPort+"\t"+ UUID.randomUUID().toString();
}
}
8004服务提供者完整项目结构
3、启动8004项目,来到zookeeper上
交互式进入容器
docker exec -it 078de5ab4afd /bin/bash
这里的078..是zookeeper的容器id
进入到bin目录下,启动客户端
./zkCli.sh
ls列出所有节点,然后进入/services下查看到cloud-provider-payment已经注册成功
此时可以查看节点的详细信息
get /services/cloud-provider-payment/57f06ede-9795-4703-84b0-44295dd69c39
其中后面的编号是节点的流水号
此时在浏览器中访问服务提供者的接口
http://127.0.0.1:8004/payment/zk
则服务提供者注册进Zookeeper成功
4、服务消费者注册进Zookeeper
参考上面新建Eureka的服务消费者,再新建子模块cloud-consumerzk-order88
修改其pom文件同样加入
<!-- SpringBoot整合zookeeper客户端 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zookeeper-discovery</artifactId>
</dependency>
完整pom文件
<?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">
<parent>
<artifactId>SpringCloudDemo</artifactId>
<groupId>com.badao</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>cloud-consumerzk-order88</artifactId>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
</properties>
<dependencies>
<dependency><!-- 引入自己定义的api通用包,可以使用Payment支付Entity -->
<groupId>com.badao</groupId>
<artifactId>cloud-api-commons</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- SpringBoot整合zookeeper客户端 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zookeeper-discovery</artifactId>
</dependency>
</dependencies>
</project>
新建并修改application.yml
server:
port: 88
#服务别名----注册zookeeper到注册中心名称
spring:
application:
name: cloud-consumer-order
cloud:
zookeeper:
connect-string: 自己的zookeeper的ip:2181
新建主启动类并添加注解@EnableDiscoveryClient
package com.badao.springclouddemo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
@SpringBootApplication
@EnableDiscoveryClient
public class OrderZKMain88
{
public static void main(String[] args) {
SpringApplication.run(OrderZKMain88.class, args);
}
}
为了实现服务调用,添加RestTemplate的配置文件
package com.badao.springclouddemo.config;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;
@Configuration
public class ApplicationContextConfig
{
@Bean
@LoadBalanced
public RestTemplate getRestTemplate()
{
return new RestTemplate();
}
}
新建Controller
package com.badao.springclouddemo.controller;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;
import javax.annotation.Resource;
@RestController
@Slf4j
public class OrderZKController {
public static final String INVOKE_URL = "http://cloud-provider-payment";
@Resource
private RestTemplate restTemplate;
@GetMapping(value = "/consumer/payment/zk")
public String paymentInfo()
{
String result = restTemplate.getForObject(INVOKE_URL+"/payment/zk",String.class);
return result;
}
}
其中这里的URL就是上面服务提供者的别名
完整88服务消费者目录
启动88服务消费者
来到zookeeper上查看services上,注册成功
ls /services
然后浏览器中访问88的接口进行服务调用
http://127.0.0.1:88/consumer/payment/zk
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/135957.html