目录
一、下载nacos
选择配套springcloud版本的的nacos下载
版本说明 · alibaba/spring-cloud-alibaba Wiki · GitHub
windows环境下选zip包。下载后解压。
二、修改配置,启动nacos
1.直接启动
进入解压后的bin目录,编辑startup.cmd,修改set MODE行,为set MODE="standalone",保存。
双击startup.cmd或者以管理员运行。
可以在bin/logs中查看日志,看是否启动成功。
2.后台启动
用nssm工具,将nacos安装为后台服务。nssm使用参考以下链接。
使用nssm工具将ES、Kibana、Logstash或者其他.bat文件部署为Windows后台服务的方法_nssm kibana_格格巫 MMQ!!的博客-CSDN博客
启动后输入地址访问。用户名密码均为nacos。
http://192.168.1.15:8848/nacos/index.html
三、springcloud中配置nacos
代码目录结构
1.springcloud配置文件pom
项目整体配置确定springcloud版本,决定各个组件的版本。
只需关注<dependencyManagement>即可,此处代替了<parent>。
<modules>下面的模块是项目添加模块时自动添加的。
<?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> <modules> <module>stock</module> <module>order</module> <module>stock-nacos</module> <module>order-nacos</module> </modules> <groupId>com.wind.springcloud</groupId> <artifactId>alibaba</artifactId> <version>0.0.1-SNAPSHOT</version> <name>alibaba</name> <description>springcloudalibaba</description> <packaging>pom</packaging> <properties> <java.version>1.8</java.version> <spring.cloud.alibaba.version>2.2.5.RELEASE</spring.cloud.alibaba.version> <spring.boot.version>2.3.11.RELEASE</spring.boot.version> <spring.cloud.version> Hoxton.SR8</spring.cloud.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-test</artifactId> <scope>test</scope> </dependency> </dependencies> <dependencyManagement> <dependencies> <!-- alibaba版本管理--> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-alibaba-dependencies</artifactId> <version>${spring.cloud.alibaba.version}</version> <type>pom</type> <scope>import</scope> </dependency> <!-- springboot版本管理--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>${spring.boot.version}</version> <type>pom</type> <scope>import</scope> </dependency> <!-- springcloud版本管理--> <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> </project>
2.order-nacos订单模块的配置
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"> <parent> <artifactId>alibaba</artifactId> <groupId>com.wind.springcloud</groupId> <version>0.0.1-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>order-nacos</artifactId> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- nacos服务注册发现 --> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency> </dependencies> </project>
application.yml
服务注册到nacos默认使用application name的值
server: port: 8020 spring: application: name: order-service cloud: nacos: server-addr: 127.0.0.1:8848 discovery: username: nacos password: nacos # namespace: public #服务分类管理 默认public # ephemeral: false #永久实例 默认true 临时实例 # service: 默认取${spring.application.name} # group: 更细的分类管理 # weight: #负载均衡权重 # metadata: 元数据 可以根据源码做扩展
3.stock-service库存模块的配置
pom.xml和订单模块一致,application.yml只需要port改为8021即可。
4.代码
OrderApplication.java
其中@LoadBalanced是nacos默认负载均衡调用。解析服务名获得ip,port
package com.wind.order;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.client.RestTemplateBuilder;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate;
/**
* @author dongguanghui
* @date 2023/5/15 17:51
*/
@SpringBootApplication
public class OrderApplication {
public static void main(String[] args) {
SpringApplication.run(OrderApplication.class,args);
}
@Bean
@LoadBalanced
public RestTemplate restTemplate(RestTemplateBuilder builder){
RestTemplate restTemplate = builder.build();
return restTemplate;
}
}
OrderController.java
package com.wind.order.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;
/**
* @author dongguanghui
* @date 2023/5/15 17:47
*/
@RestController
@RequestMapping("/order")
public class OrderController {
@Autowired
private RestTemplate restTemplate;
@RequestMapping("/add")
public String add(){
System.out.println("下单成功");
String msg = restTemplate.getForObject("http://stock-service/stock/reduct", String.class);
return "order success!" + msg;
}
}
StockApplication.java
package com.wind.stock;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.client.RestTemplateBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate;
/**
* @author dongguanghui
* @date 2023/5/15 17:51
*/
@SpringBootApplication
public class StockApplication {
public static void main(String[] args) {
SpringApplication.run(StockApplication.class,args);
}
}
StockController.java
package com.wind.stock.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;
/**
* @author dongguanghui
* @date 2023/5/15 17:47
*/
@RestController
@RequestMapping("/stock")
public class StockController {
@Value("${server.port}")
private String port;
@RequestMapping("/reduct")
public String reduct(){
System.out.println("下单成功");
return "reduct success!:"+port;
}
}
四、项目启动及运行
项目启动后,服务注册到nacos。
浏览器直接调用接口。可以看到后台通过服务名调用另一个服务成功