服务的提供者
添加依赖
<!--Alibaba-Nacos-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
配置启动类
在启动类添加@EnableDiscoveryClient启动nacos
和@EnableFeignClients启动feign负载均衡策略
package com.xfdc.exercise;
import com.querydsl.jpa.impl.JPAQueryFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.context.annotation.Bean;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
import javax.persistence.EntityManager;
@EnableSwagger2
@SpringBootApplication
@EnableDiscoveryClient
public class ExerciseApplication extends SpringBootServletInitializer {
public static void main(String[] args) {
SpringApplication.run(ExerciseApplication.class, args);
}
@Bean
@Autowired
public JPAQueryFactory jpaQuery(EntityManager entityManager) {
return new JPAQueryFactory(entityManager);
}
}
配置文件(yml)
server:
port: 80
spring:
application:
name: exercise
cloud:
nacos:
discovery:
server-addr: localhost:8848
服务的提供者
//region 菜单展现
/**
* @param pid
* @return
*/
@ApiOperation("菜单展现")
@ApiImplicitParam(name = "pid", value = "父级id")
@Transactional
@RequestMapping(value = "/getParameterLists", method = {RequestMethod.GET})
public Request getParameterLists(@RequestParam(value = "pid", required = false) Integer pid) {
List<ParameterEntity> parameterEntitys = hrParameterDao.findByPId(pid);
return Request.failure(ResultCode.SUCCESS, "查询成功", parameterEntitys);
}//endregion
服务的消费者
添加依赖
<!--Alibaba-Nacos-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!--远程调用-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
<version>${openfeign.version}</version>
</dependency>
启动类配置
package com.xfdc.nacos;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.openfeign.EnableFeignClients;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
@EnableSwagger2
@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients(basePackages = {"com.xfdc.nacos.repository"})
public class NacosApplication {
public static void main(String[] args) {
SpringApplication.run(NacosApplication.class, args);
}
}
为什么要加上()@EnableFeignClients(basePackages = {“com.xfdc.nacos.repository”})
刚开始启动的时候报that could not be found. 查了一会之后说没有指定basePackages包扫描路径,后来在@EnableFeignClients指定了扫描包路径就解决了。
关于问题详情:https://blog.csdn.net/qq_28165595/article/details/102328066
配置文件
server:
port: 8081
spring:
application:
name: nacos
cloud:
nacos:
discovery:
server-addr: localhost:8848
只是服务名不一样spring.application.name: nacos
创建调用接口
package com.xfdc.nacos.repository;
import com.xfdc.nacos.base.Request;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
/**
* @author Administrator
*/
@FeignClient("exercise")
public interface Template {
@RequestMapping(value = "/getParameterLists", method = {RequestMethod.GET})
public Request getParameterLists(@RequestParam(value = "pid", required = false) Integer pid);
}
创建调用Controller层
package com.xfdc.nacos.controller;
import com.xfdc.nacos.base.Request;
import com.xfdc.nacos.repository.Template;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import javax.transaction.Transactional;
@RestController
public class NacosController {
@Autowired
private Template template;
//region 菜单展现
/**
* @param pid
* @return
*/
@ApiOperation("菜单展现")
@ApiImplicitParam(name = "pid", value = "父级id")
@Transactional
@RequestMapping(value = "/getParameterLists", method = {RequestMethod.GET})
public Request getParameterLists(@RequestParam(value = "pid", required = false) Integer pid) {
return template.getParameterLists(pid);
}//endregion
}
测试
nacos注册中心
访问:http://127.0.0.1:8848/nacos/index.html#/
用Swagger测试Feign负载均衡
服务提供者一个是80端口一个是8080
访问Nacos项目的端口来测试远程调用和负载均衡
访问两次
完毕
还有就是idea可以运行多个端口的项目
-Dserver.port=8080
完结散花