1.添加注册类

package com.ruoyi.framework.config;
import javax.annotation.PostConstruct;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
import com.alibaba.nacos.api.annotation.NacosInjected;
import com.alibaba.nacos.api.exception.NacosException;
import com.alibaba.nacos.api.naming.NamingService;

@Configuration
public class NacosConfig {
	@Value("${nacos.config.server-addr}")
    private String serverAddr;	
    @Value("${spring.application.name}")
    private String applicationName;   
    @NacosInjected
    private NamingService namingService;   
    @PostConstruct
    public void registerInstance() throws NacosException {
    	
    	if(serverAddr != null && !serverAddr.isEmpty()){
    		String[] temp = serverAddr.split(":");
    		//nacos手动注册 api
    		namingService.registerInstance(applicationName, temp[0], Integer.parseInt(temp[1]));
    	}
    }
}

2.添加nacos配置

我用的yml文件:

# spring.application.name  此处省略了 服务名称的配置
nacos:
  config:
    server-addr: 127.0.0.1:8848 
  discovery:
server-addr: 127.0.0.1:8848 

3.添加nacos依赖

        <dependency>
		    <groupId>com.alibaba.boot</groupId>
		    <artifactId>nacos-discovery-spring-boot-starter</artifactId>
		    <version>0.2.3</version>
		</dependency>
		<dependency>
		    <groupId>com.alibaba.boot</groupId>
		    <artifactId>nacos-config-spring-boot-starter</artifactId>
		    <version>0.2.3</version>
		</dependency>

4.注入RestTemplate类


import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.client.ClientHttpRequestFactory;
import org.springframework.http.client.SimpleClientHttpRequestFactory;
import org.springframework.web.client.RestTemplate;

/**
 * RestTemplate配置 这是一种JavaConfig的容器配置,用于spring容器的bean收集与注册,并通过参数传递的方式实现依赖注入。
 * "@Configuration"注解标注的配置类,都是spring容器配置类,springboot通过"@EnableAutoConfiguration"
 * 注解将所有标注了"@Configuration"注解的配置类,"一股脑儿"全部注入spring容器中。
 * 
 */
@Configuration
public class RestTemplateConfig {

	@Bean
	public RestTemplate restTemplate(ClientHttpRequestFactory factory) {
		return new RestTemplate(factory);
	}

	@Bean
	public ClientHttpRequestFactory simpleClientHttpRequestFactory() {
		SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory();
		factory.setReadTimeout(5000);// ms
		factory.setConnectTimeout(15000);// ms
		return factory;
	}
}

4.远程调用

使用RestTemplate 替代@FeignClient(value = “XXX”)


import java.util.Map;

import javax.annotation.Resource;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Service;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.client.RestTemplate;

import com.alibaba.nacos.api.annotation.NacosInjected;
import com.alibaba.nacos.api.exception.NacosException;
import com.alibaba.nacos.api.naming.NamingService;
import com.alibaba.nacos.api.naming.pojo.Instance;

@Service("dataMService")
public class DataMService {

	private final Logger logger = LoggerFactory.getLogger(this.getClass());

	private String totoService = "XXX";

	@Resource
	private RestTemplate restTemplate;

	@NacosInjected
	private NamingService namingService;

	// @GetMapping(value = "/table/{Id}")
	public String viewInit(@PathVariable("Id") String Id) {
		Instance instance;
		try {
			instance = namingService.selectOneHealthyInstance(totoService);
			String url = String.format("http://%s:%d/table/" + Id, instance.getIp(), instance.getPort());
			String result = restTemplate.getForObject(url, String.class);
			return result;
		} catch (NacosException e) {
			logger.info("创建代办报错!!!" + e.getMessage());
			System.out.println("创建代办报错!!!" + e.getMessage());
			return "";
		}
	};
.......
}

over

Logo

快速构建 Web 应用程序

更多推荐