目录
一、下载nacos
二、修改配置,启动nacos
1.直接启动
2.后台启动
三、springcloud中配置nacos
代码目录结构
1.springcloud配置文件pom
2.order-nacos订单模块的配置
pom.xml
application.yml
3.stock-service库存模块的配置
4.代码
OrderApplication.java
OrderController.java
StockApplication.java
StockController.java
四、项目启动及运行
选择配套springcloud版本的的nacos下载
版本说明 · alibaba/spring-cloud-alibaba Wiki · GitHub
windows环境下选zip包。下载后解压。
进入解压后的bin目录,编辑startup.cmd,修改set MODE行,为set MODE="standalone",保存。
双击startup.cmd或者以管理员运行。
可以在bin/logs中查看日志,看是否启动成功。
用nssm工具,将nacos安装为后台服务。nssm使用参考以下链接。
使用nssm工具将ES、Kibana、Logstash或者其他.bat文件部署为Windows后台服务的方法_nssm kibana_格格巫 MMQ!!的博客-CSDN博客
启动后输入地址访问。用户名密码均为nacos。
http://192.168.1.15:8848/nacos/index.html
项目整体配置确定springcloud版本,决定各个组件的版本。
只需关注
4.0.0 stock order stock-nacos order-nacos com.wind.springcloud alibaba 0.0.1-SNAPSHOT alibaba springcloudalibaba pom 1.8 2.2.5.RELEASE 2.3.11.RELEASE Hoxton.SR8 org.springframework.boot spring-boot-starter org.springframework.boot spring-boot-starter-test test com.alibaba.cloud spring-cloud-alibaba-dependencies ${spring.cloud.alibaba.version} pom import org.springframework.boot spring-boot-starter-parent ${spring.boot.version} pom import org.springframework.cloud spring-cloud-dependencies ${spring.cloud.version} pom import org.springframework.boot spring-boot-maven-plugin
alibaba com.wind.springcloud 0.0.1-SNAPSHOT 4.0.0 order-nacos org.springframework.boot spring-boot-starter-web com.alibaba.cloud spring-cloud-starter-alibaba-nacos-discovery
服务注册到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: 元数据 可以根据源码做扩展
pom.xml和订单模块一致,application.yml只需要port改为8021即可。
其中@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;
}
}
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;
}
}
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);
}
}
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。
浏览器直接调用接口。可以看到后台通过服务名调用另一个服务成功