Springboot 项目注册到nacos中,并调度用nacos中的其他服务
1.添加注册类package com.ruoyi.framework.config;import javax.annotation.PostConstruct;import org.springframework.beans.factory.annotation.Value;import org.springframework.context.annotation.Configuration;im
·
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
更多推荐
已为社区贡献2条内容
所有评论(0)