nacos部署及demo

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;
    }


}


Nacos是一个用于动态服务发现、配置管理和服务管理的开源项目,而Seata则是一个开源的分布式事务解决方案。将Nacos与Seata进行整合可以实现在分布式环境下的事务一致性管理和服务注册与发现。 在整合Nacos和Seata的Demo中,我们首先需要搭建一个分布式的环境。可以使用Docker来快速搭建,通过Docker容器分别部署Nacos和Seata的服务。 1. 首先运行Nacos的容器,并将其设置为注册中心。可以通过在Nacos容器内运行以下命令来启动Nacos服务: ``` docker run --name nacos_server -d -e MODE=standalone -p 8848:8848 nacos/nacos-server ``` 2. 接下来,运行Seata的容器,并将其设置为Seata的事务协调器。可以通过在Seata容器内运行以下命令来启动Seata服务: ``` docker run --name seata_server -d -p 8091:8091 seataio/seata-server ``` 3. 在Demo中,我们需要定义业务服务和订单服务。在业务服务中,我们使用Nacos提供的服务注册和发现能力,将业务服务注册到Nacos注册中心。在订单服务中,我们使用Seata实现分布式事务管理。业务服务通过调用订单服务来完成事务操作。 4. 在业务服务的配置文件中,将Nacos注册中心的地址配置好,以便业务服务可以注册和发现其他服务。 5. 在订单服务的配置文件中,将Seata事务协调器的地址和端口配置好,以便订单服务可以与Seata进行事务管理。 使用Nacos和Seata进行整合后,可以实现业务服务和订单服务之间的分布式事务管理。通过在业务服务中注册到Nacos注册中心,可以动态发现和调用订单服务。同时,在订单服务中,Seata能够提供分布式事务一致性的保障,避免了分布式事务的难题。 总之,通过整合Nacos和Seata,在分布式环境中实现了服务注册与发现和分布式事务的管理。这样能够更好地保证系统的可用性和一致性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值