专栏首页Spring Cloud如何在Windows系统搭建好Spring Cloud Stream开发环境
原创

如何在Windows系统搭建好Spring Cloud Stream开发环境

当下微服务架构盛行,在Java语言世界最佳的微服务实践无疑是Spring Cloud。Spring Cloud顾名思义就是提供一系列云服务技术的技术解决方案组合,包含云配置、服务注册及发现、客户端弹性模式、服务路由、服务安全、服务日志跟踪及聚合和消息服务等等微服务技术解决方案。其中Spring Cloud Stream就是消息服务的技术解决方案。

本文的主题就是:如何在Windows系统搭建好Spring Cloud Stream开发环境?Java程序员通常比较穷,通常只有一台Windows系统电脑,但是又要在云时代做开发。所以在自己的电脑搭一个虚拟的分布式开发环境相当重要,不仅可以减少很多手动启动服务的工作,还能减少很多任务栏窗口。要搭建好理想的开发环境,首先得了解一些原理:

下图是Spring Cloud Stream的架构图,生产者通过发射器将消息发射到通道,然后到达绑定器,绑定器再和特定的消息系统交互;消息系统再和消费者绑定器交互,通过通道到达接收器,然后把消息发给消费者。Spring   Cloud Stream官方实现的消息系统绑定器支持Kafka和RabbitMQ,当然第三方也可以实现其他消息系统的绑定器。Spring Cloud Stream不管底层的消息系统是什么,对开发者的接口是一样的。这样理论上就可以自由切换不同的消息系统实现,让Java开发者可以不用学习那么多具体的消息系统的使用方法。

本文选用的消息系统是Kafka,Kafka是Scala语言(一种运行在Java虚拟机上的语言)开发的一种分布式消息系统,它的分布式特性又依赖Zookeeper的支持。而Kafka和Zookeeper的运行都只是依赖JRE运行环境。所以对于Java开发者来说,选择Kafka会使运行环境单一,比较省事。如果用RabbitMQ的话,就还要安装Erlang语言的运行环境。

所以,我们要做的第一件事就是安装JRE,当然JDK也可以。第二件事就是搭建Zookeeper集群。第三件事就是搭建Kafka集群。第四件事就是把Zookeeper集群和Kafka集群做成Windows系统服务,做到在后台静默启动和开机自启动。第五件事就是在Spring Cloud项目上引入Spring Cloud Stream和配置好具体的消息系统。最后,我们就可以舒心地在项目上收发消息了!


1.安装JRE

Java程序员都会,本文不做介绍。安装完以后,别忘了配置环境变量。如果已经安装就不用理会。


2.Windows系统单机上搭建Zookeeper集群

2.1 下载

官网地址:http://zookeeper.apache.org/

2.2 解压

将下载到的压缩文件解压,并复制三份到如下目录,你可以自由定制你的目录:

E:\zookeeper\node1\zookeeper-3.4.12E:\zookeeper\node2\zookeeper-3.4.12E:\zookeeper\node3\zookeeper-3.4.12

2.3 修改配置文件

首先将\conf目录下的zoo_sample.cfg复制一份在当前目录并改名成zoo.cfg。

E:\zookeeper\node1\zookeeper-3.4.12\conf\zoo.cfgE:\zookeeper\node2\zookeeper-3.4.12\conf\zoo.cfgE:\zookeeper\node3\zookeeper-3.4.12\conf\zoo.cfg

然后修改zoo.cfg的内容,以下是主要配置:

dataDir=E:\\zookeeper\\node1\\zookeeper-3.4.12\\datadataLogDir=E:\\zookeeper\\node1\\zookeeper-3.4.12\\logclientPort=2181server.1=localhost:2887:3887server.2=localhost:2888:3888server.3=localhost:2889:3889
dataDir=E:\\zookeeper\\node2\\zookeeper-3.4.12\\datadataLogDir=E:\\zookeeper\\node2\\zookeeper-3.4.12\\logclientPort=2182server.1=localhost:2887:3887server.2=localhost:2888:3888server.3=localhost:2889:3889
dataDir=E:\\zookeeper\\node3\\zookeeper-3.4.12\\datadataLogDir=E:\\zookeeper\\node3\\zookeeper-3.4.12\\logclientPort=2183server.1=localhost:2887:3887server.2=localhost:2888:3888server.3=localhost:2889:3889

最后在E:\zookeeper\node1\zookeeper-3.4.12\data建立一个myid文件,文件内容是一个整数,分别是1、2、3。

E:\zookeeper\node1\zookeeper-3.4.12\data\myid (内容为1)E:\zookeeper\node2\zookeeper-3.4.12\data\myid (内容为2)E:\zookeeper\node3\zookeeper-3.4.12\data\myid (内容为3)

2.4 运行命令

cd E:\zookeeper\node1\zookeeper-3.4.12\binzkServer.cmdcd E:\zookeeper\node2\zookeeper-3.4.12\binzkServer.cmdcd E:\zookeeper\node3\zookeeper-3.4.12\binzkServer.cmd

2.5 验证集群是否安装成功

cd E:\zookeeper\node3\zookeeper-3.4.12\binzkCli.cmd

3.Windows系统单机上搭建Kafka集群

3.1 下载

官网地址:http://kafka.apache.org/

3.2 解压

将下载到的压缩文件解压,并复制三份到如下目录,你可以自由定制你的目录:

E:\kafka\node1\kafka_2.12-2.1.0E:\kafka\node2\kafka_2.12-2.1.0E:\kafka\node3\kafka_2.12-2.1.0

3.3 修改配置文件

修改\cofig目录下的server.properties文件,以下是主要配置:

broker.id=0port=9092host.name=127.0.0.1log.dirs=E:\\kafka\\node1\\kafka_2.12-2.1.0\\logzookeeper.connect=localhost:2181,localhost:2182,localhost:2183
broker.id=1port=9093host.name=127.0.0.1log.dirs=E:\\kafka\\node2\\kafka_2.12-2.1.0\\logzookeeper.connect=localhost:2181,localhost:2182,localhost:2183
broker.id=2port=9094host.name=127.0.0.1log.dirs=E:\\kafka\\node3\\kafka_2.12-2.1.0\\logzookeeper.connect=localhost:2181,localhost:2182,localhost:2183

在bin\windows\kafka-run-class.bat中找到“set COMMAND=%JAVA%”行,给 %CLASSPATH%加上双引号:

set COMMAND=%JAVA% %KAFKA_HEAP_OPTS% %KAFKA_JVM_PERFORMANCE_OPTS% %KAFKA_JMX_OPTS% %KAFKA_LOG4J_OPTS% -cp "%CLASSPATH%" %KAFKA_OPTS% %*

3.4 运行命令

E:/kafka/node1/kafka_2.12-2.1.0/bin/windows/kafka-server-start.bat E:/kafka/node1/kafka_2.12-2.1.0/config/server.propertiesE:/kafka/node2/kafka_2.12-2.1.0/bin/windows/kafka-server-start.bat E:/kafka/node2/kafka_2.12-2.1.0/config/server.propertiesE:/kafka/node3/kafka_2.12-2.1.0/bin/windows/kafka-server-start.bat E:/kafka/node3/kafka_2.12-2.1.0/config/server.properties

3.5 验证集群是否安装成功

E:/kafka/node1/kafka_2.12-2.1.0/bin/windows/kafka-topics.bat --create --zookeeper localhost:2181,localhost:2182,localhost:2183 --replication-factor 1 --partitions 1 --topic testTopic

4.Zookeeper集群和Kafka集群做成Windows系统服务

4.1 做好集群运行的批处理文件

对于Zookeeper,在E:\zookeeper目录下新建一个文件zkClusterServer.cmd。内容如下:

echo "start zookeeper cluster server..."start call ./node1/zookeeper-3.4.12/bin/zkServer.cmdstart call ./node2/zookeeper-3.4.12/bin/zkServer.cmdstart call ./node3/zookeeper-3.4.12/bin/zkServer.cmdecho "start zookeeper cluster server end"

对于Kafka,在E:\kafka目录下新建一个文件KafkaClusterServer.cmd。内容如下:

echo "start kafka cluster server..."start call  ./node1/kafka_2.12-2.1.0/bin/windows/kafka-server-start.bat ./node1/kafka_2.12-2.1.0/config/server.propertiesstart call  ./node2/kafka_2.12-2.1.0/bin/windows/kafka-server-start.bat ./node2/kafka_2.12-2.1.0/config/server.propertiesstart call     ./node3/kafka_2.12-2.1.0/bin/windows/kafka-server-start.bat ./node3/kafka_2.12-2.1.0/config/server.propertiesecho "start kafka cluster server end"

这两个批处理文件都是把整个集群的所有节点都启动起来,都是异步调用。

4.2 下载工具

可以在百度网盘下载instsrv.exe和srvany.exe。地址:https://pan.baidu.com/s/1PI6qMjdVkuYyjRLokt7xRw ;提取码:fc1o。

然后这两个exe文件都扔到C:\Windows目录下(你可以扔到任何目录下)。

4.3 生成Windows系统服务

执行下面的命令,生成ZookeeperCluster服务和KafkaCluster服务:

C:\Windows\instsrv.exe ZookeeperCluster C:\Windows\srvany.exeC:\Windows\instsrv.exe KafkaCluster C:\Windows\srvany.exe

现在你就可以在系统服务中看到这两个服务了,但是这两个服务目前还不可用。

4.4 修改系统服务的注册表

从注册表中找到:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\ZookeeperClusterHKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\KafkaCluster

如下图修改:

现在,这两个服务才真正可用。

4.5 启动服务和设置服务开机自启动

启动服务和设置服务开机自启动


5.在Spring Cloud项目上引入Spring Cloud Stream和配置好具体的消息系统

本例使用的Spring Cloud版本是Greenwich。对应的Spring boot版本是2.1.x。其他版本的用法最好通过https://start.spring.io/去确定。

5.1 引入依赖包

<dependency>    <groupId>org.apache.kafka</groupId>    <artifactId>kafka-streams</artifactId></dependency><dependency>    <groupId>org.springframework.cloud</groupId>    <artifactId>spring-cloud-stream</artifactId></dependency><dependency>    <groupId>org.springframework.cloud</groupId>    <artifactId>spring-cloud-stream-binder-kafka-streams</artifactId></dependency>

5.2 项目中做好配置

spring.cloud.stream.kafka.binder.brokers=localhost:9092,localhost:9093,localhost:9094spring.cloud.stream.kafka.binder.default-broker-port=9092

现在本文的目的已经达到了,已经在Windows系统搭建好了一个Spring Cloud Stream开发环境,一开机就可以直接写Spring Cloud Stream代码,是不是很爽?现在再加一道菜,把可运行的Jar包做成Windows服务。


6.把可运行的Jar包做成Windows服务

本节和主题无关,但是非常有用。 有些jar包不怎么需要开发,但是必须启动着,给别的项目提供开发环境。比如Spring Cloud Config和Spring Cloud Eureka服务器等等。做成系统服务可以少开很多窗口,省很多手动启动的工作。所以把可运行的Jar包做成Windows服务是非常有用的。

6.1 下载工具

去https://github.com/kohsuke/winsw下载winsw-xxx-bin.exe文件。

6.2 做成Windows服务

把可执行的Jar包、winsw-xxx-bin.exe放到同一个目录下,两者名称改成一致。比如,有个云配置服务叫做CloudConfig.jar和CloudConfig.exe。然后再创建一个CloudConfig.xml文件。xml文件内容如下:

<service>    <id>CloudConfig</id>    <name> CloudConfig </name>    <description>This is CloudConfig service</description>    <!-- java环境变量 -->    <env name="JAVA_HOME" value="%JAVA_HOME%"/>    <executable>java</executable>    <arguments>-jar "E:\services\cloud-config\CloudConfig.jar"</arguments>    <!-- 开机启动 -->    <startmode>Automatic</startmode>    <!-- 日志配置 -->    <logpath>%BASE%\log</logpath>    <logmode>rotate</logmode> </service>

如下图:

然后,安装服务:

cd E:\services\cloud-configCloudConfig.exe install

现在Windows服务中就有一个叫做CloudConfig的服务了。

6.3 启动服务和设置服务开机自启动

启动服务和设置服务开机自启动


遵照这个思路,在Linux系统或Mac系统也一样可以搭建这样的单机分布式开发环境,对其他云服务也可以搭建成这样方便的单机分布式开发环境。原来,只有一台电脑的穷程序员在云开发时代也可以为所欲为。

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 如何重复读取HttpServletRequest的HTTP请求体数据

    在开发Java web项目的时候,经常会用到Spring MVC的注解@RequestBody,用于读取HTTP请求体。有时候又要在业务代码里面读取HTTP请求...

    leaforbook
  • Swagger UI 在Spring boot中的应用

    Swagger UI是一个自动生成Java web接口文档的库。Swagger UI可以帮助前端开发者和后端开发者方便地进行沟通,后端开发者可以因此节省很多写接...

    leaforbook
  • 利用Spring特性给接口添加注解式挡板和分布式锁

    在很多实际场景中,需要给接口加上挡板和分布式锁。比如,最常见的定时任务,有时候需要通过配置决定这个定时任务是该运行还是该暂停,有时候开启了多个实例,但是在同一时...

    leaforbook
  • ZOOKEEPER安装

    1.将ZOOKEEPER安装包上传到服务器上 /usr/local 2.解压并重命名目录 tar xzvf zookeeper-3.4.8.tar.gz ...

    98k
  • zk | zookeeper单机和集群搭建过程详细步骤

    https://www-eu.apache.org/dist/zookeeper/

    码神联盟
  • Ctrip·Tech——架构师一席谈(2)Zookeeper在分布式应用中的作用

    是不是要在标题的“作用”之前加上“重要”两个字,我犹豫了一下,zookeeper提供的功能是如此的重要,以至于如果你在应用中不使用它,早晚也会在你的应用中去实现...

    携程技术
  • Kafka分布式消息系统(搭建Zookeeper集群) - Part.2

    kafka使用zookeeper来管理Brokers(kafka服务进程)、执行partition(分区)的leader选举、当出现变更时向kafka发送通知(...

    张子阳
  • Linux安装zookeeper

    猿码优创
  • 手把手教你dubbo之linux环境下搭建zookeeper集群

    2.首先我从zookeeper官网上下载zookeper.通过FileZilla上传到我的阿里服务器上,如下图:

    程序员小强
  • centos7搭建kafka集群-第二篇

    程序员同行者

扫码关注云+社区

领取腾讯云代金券