Getting Started
Reference Documentation
- https://blog.csdn.net/web2u/article/details/145107436
docker rabbitMq 启动命令
-
docker pull nacos/nacos-server:v2.5.0
-
mkdir -p /mydata/nacos/conf
-
mkdir -p /mydata/nacos/logs
-
docker run -d --name nacos-server -p 8848:8848 nacos/nacos-server:v2.5.0
-
docker cp nacos:/home/nacos/logs/ /mydata/nacos/
docker cp nacos:/home/nacos/conf/ /mydata/nacos/ -
docker rm -f nacos
-
docker run -d
–name nacos
-p 8848:8848
–privileged=true
-e JVM_XMS=1024m
-e JVM_XMX=1024m
-e MODE=standalone
-e SPRING_DATASOURCE_PLATFORM=mysql
-e MYSQL_SERVICE_HOST=192.168.56.10
-e MYSQL_SERVICE_PORT=3306
-e MYSQL_SERVICE_DB_NAME=nacos
-e MYSQL_SERVICE_USER=root
-e MYSQL_SERVICE_PASSWORD=root
-v /mydata/nacos/logs/:/home/nacos/logs
-v /mydata/nacos/conf/:/home/nacos/conf/
–restart=always
nacos/nacos-server:v2.5.0
简单demo
- web可访问nacos配置中心
- 可以给自动化测试使用 做开关
package com.gouying.mall.discovery.controller;
import java.util.HashMap;
import java.util.Map;
import com.gouying.mall.discovery.config.NacosConfigInfo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* Dynamic bean refresh example.
*
* @author lixiaoshuang
*/
@RestController
@RequestMapping("/nacos/bean")
public class BeanAutoRefreshConfigExample {
@Autowired
private NacosConfigInfo nacosConfigInfo;
//http://127.0.0.1:18084/nacos/bean
@GetMapping
public Map<String, String> getConfigInfo() {
Map<String, String> result = new HashMap<>();
result.put("serverAddr", nacosConfigInfo.getServerAddr());
result.put("prefix", nacosConfigInfo.getPrefix());
result.put("group", nacosConfigInfo.getGroup());
result.put("namespace", nacosConfigInfo.getNamespace());
return result;
}
}
package com.gouying.mall.discovery.controller;
import java.util.concurrent.Executor;
import java.util.concurrent.Executors;
import com.alibaba.cloud.nacos.NacosConfigProperties;
import com.alibaba.nacos.api.config.ConfigService;
import com.alibaba.nacos.api.config.listener.Listener;
import com.alibaba.nacos.api.exception.NacosException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
/**
* Configuration listener example.
*
* @author lixiaoshuang
*/
@Component
public class ConfigListenerExample {
Logger logger = LoggerFactory.getLogger(ConfigListenerExample.class);
/**
* Nacos dataId.
*/
public static final String DATA_ID = "nacos-config-example.properties";
/**
* Nacos group.
*/
public static final String GROUP = "DEFAULT_GROUP";
@Autowired
private NacosConfigProperties nacosConfigProperties;
@PostConstruct
public void init() throws NacosException {
ConfigService configService = nacosConfigProperties.configServiceInstance();
configService.addListener(DATA_ID, GROUP, new Listener() {
@Override
public Executor getExecutor() {
return Executors.newSingleThreadExecutor();
}
@Override
public void receiveConfigInfo(String configInfo) {
logger.info("[dataId]:[" + DATA_ID + "],Configuration changed to:"
+ configInfo);
}
});
}
}
package com.gouying.mall.discovery.controller;
import java.util.concurrent.Executor;
import java.util.concurrent.Executors;
import com.alibaba.cloud.nacos.NacosConfigProperties;
import com.alibaba.nacos.api.config.ConfigService;
import com.alibaba.nacos.api.config.listener.Listener;
import com.alibaba.nacos.api.exception.NacosException;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
/**
* Example of docking with Nacos interface.
*
* @author lixiaoshuang
*/
@RestController
@RequestMapping("/nacos")
public class DockingInterfaceExample {
Logger logger = LoggerFactory.getLogger(DockingInterfaceExample.class);
/**
* Nacos group.
*/
public static final String DEFAULT_GROUP = "DEFAULT_GROUP";
@Autowired
private NacosConfigProperties nacosConfigProperties;
/**
* Get configuration information.
*
* @param dataId dataId
* @param group group
* @return config
*/
//http://127.0.0.1:18084/nacos/getConfig?dataId=nacos-config-example.properties&group=discover-server
@RequestMapping("/getConfig")
public String getConfig(@RequestParam("dataId") String dataId,
@RequestParam(value = "group", required = false) String group)
throws NacosException {
if (StringUtils.isEmpty(group)) {
group = DEFAULT_GROUP;
}
ConfigService configService = nacosConfigProperties.configServiceInstance();
return configService.getConfig(dataId, group, 2000);
}
/**
* Publish configuration.
*
* @param dataId dataId
* @param group group
* @param content content
* @return boolean
*/
//http://127.0.0.1:18084/nacos/publishConfig?dataId=nacos-config-example.properties&group=discover-server&content=key=value
@RequestMapping("/publishConfig")
public boolean publishConfig(@RequestParam("dataId") String dataId,
@RequestParam(value = "group", required = false) String group,
@RequestParam("content") String content) throws NacosException {
if (StringUtils.isEmpty(group)) {
group = DEFAULT_GROUP;
}
ConfigService configService = nacosConfigProperties.configServiceInstance();
return configService.publishConfig(dataId, group, content);
}
/**
* Delete configuration.
*
* @param dataId dataId
* @param group group
* @return boolean
*/
@RequestMapping("/removeConfig")
public boolean removeConfig(@RequestParam("dataId") String dataId,
@RequestParam(value = "group", required = false) String group)
throws NacosException {
if (StringUtils.isEmpty(group)) {
group = DEFAULT_GROUP;
}
ConfigService configService = nacosConfigProperties.configServiceInstance();
return configService.removeConfig(dataId, group);
}
/**
* Add listener configuration information.
*
* @param dataId dataId
* @param group group
*/
@RequestMapping("/listener")
public String listenerConfig(@RequestParam("dataId") String dataId,
@RequestParam(value = "group", required = false) String group)
throws NacosException {
if (StringUtils.isEmpty(group)) {
group = DEFAULT_GROUP;
}
ConfigService configService = nacosConfigProperties.configServiceInstance();
configService.addListener(dataId, group, new Listener() {
@Override
public Executor getExecutor() {
return Executors.newSingleThreadExecutor();
}
@Override
public void receiveConfigInfo(String configInfo) {
logger.info("[Listen for configuration changes]:{}", configInfo);
}
});
return "Add Lister successfully!";
}
}
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class EchoController {
@GetMapping("/echo/{string}")
public String echo(@PathVariable String string) {
return "hello Nacos Discovery " + string;
}
@GetMapping("/divide")
public String divide(@RequestParam Integer a, @RequestParam Integer b) {
return String.valueOf(a / b);
}
}
package com.gouying.mall.discovery.controller;
import java.util.HashMap;
import java.util.Map;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* Use the @Value annotation to get configuration example.
*
* @author lixiaoshuang
*/
@RestController
@RequestMapping("/nacos/annotation")
@RefreshScope
public class ValueAnnotationExample {
@Value("${spring.cloud.nacos.config.server-addr:}")
private String serverAddr;
@Value("${spring.cloud.nacos.config.prefix:}")
private String prefix;
@Value("${spring.cloud.nacos.config.group:}")
private String group;
@Value("${spring.cloud.nacos.config.namespace:}")
private String namespace;
//http://127.0.0.1:18084/nacos/bean
@GetMapping
public Map<String, String> getConfigInfo() {
Map<String, String> result = new HashMap<>(4);
result.put("serverAddr", serverAddr);
result.put("prefix", prefix);
result.put("group", group);
result.put("namespace", namespace);
return result;
}
}
import com.gouying.mall.discovery.VmTest;
import lombok.Data;
import org.bouncycastle.pqc.math.linearalgebra.ByteUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.Cookie;
import jakarta.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.*;
@RefreshScope
@RestController
public class WebController {
@Value("${name:1}")
private String name;
@Value("${spring.datasource.username:12}")
private String username;
@GetMapping("/index1")
public List<VmTest> index(@RequestParam(value = "red",required = false) String red, HttpServletRequest request){
long start = System.currentTimeMillis();
List<VmTest> vmTests = new ArrayList<>();
long end = System.currentTimeMillis();
System.out.println((end - start));
return vmTests;
}
}