Nacos注册发现和配置中心 openfeign的使用 谷粒商城调用openfeign时dispatchservletxxxx的大坑
1.1Nacos注册发现和配置中心1.创建一个maven项目 其他项目继承他,将这个maven项目当作总依赖根据github的文档导入总依赖<!--ali cloud 组件的总配件--><dependencyManagement><dependencies><dependency><groupId>com.alibaba.cloud<
1.1Nacos注册发现和配置中心
1.创建一个maven项目 其他项目继承他,将这个maven项目当作总依赖
根据github的文档导入总依赖
<!--ali cloud 组件的总配件-->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>2.2.5.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
注册和发现的依赖
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
项目的resources创建yml文件做配置
spring:
datasource:
#数据库账号密码
username: root
password: root
#连接那个数据库
url: jdbc:mysql://1.1.1.1:3306/gulimall_sms
# 选择连接驱动
driver-class-name: com.mysql.cj.jdbc.Driver
cloud:
nacos:
discovery:
# 注册发现的 地址
server-addr: 127.0.0.1:8848
#注册发现的名字
application:
name: gulimall-coupon
#mybatis的映射
mybatis-plus:
mapper-locations: classpath*:/mapper/**/*.xml
global-config:
#属性的自增 @dataid
db-config:
id-type: auto
#服务的端口
server:
port: 7000
在启动项加上
@EnableDiscoveryClient
2.1使用Nacos
进入 : Spring Cloud alibaba 和使用文档
//这里上面加了 就不需要了
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
启动后可能遇到两个问题
- startup.cmd 启动后一闪而过
需要修改 配置用户的环境变量
- Unable to start web server,Unable to start embedded Tomcat
修改statup.cmd
或者使用
cmd startup.cmd -m standalone启动
项目启动,进入
http://127.0.0.1:8848/nacos/index.html 查看
2.2远程调用-Openfeign
- 编写被调用者的内容即使提供者
@RequestMapping("/mlist")
public R memberForCoupon(){
CouponEntity c = new CouponEntity();
c.setCouponName("100-10");
return R.ok().put("mfc",Arrays.asList(c));
}
2.编写调用者信息 即使消费者
在消费者的里创建一个package专门是调用远程服务的包
创建一个接口
//声明式告诉远程调用
//FeignClient这里填写的是注册发现设置的名称
@FeignClient("gulimall-coupon")
public interface CouponFar {
@RequestMapping("/coupon/coupon/mlist")
public R member();
}
3.调用业务
@Autowired
CouponFar couponFar;
@RequestMapping("/f")
public R member(){
MemberEntity memberEntity = new MemberEntity();
memberEntity.setNickname("re-----------");
R member = couponFar.member();
Object coupons = member.get("coupon");
return R.ok().put("member",memberEntity).put("coupon",coupons);
}
4.给启动类加上注解
//告诉系统去哪里找远程调用
@EnableFeignClients(basePackages = "com.cjg.gulimall.member.feign")
启动调用
这里有两个大坑
后面版本的cloud 不在自己添加spring-cloud-starter-loadbalancer
需要自己导入
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>
第二 明明东西都是正确 调用时发现 dispatchservletxxxx的错误
这个是版本不兼容问题2.4.4的cloud 不太好,只要调用2.3.X一下的版本就好了
3.1配置中心
导入配置中心的依赖
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
创建bootstrap.properties配置 配置中心的信息
#配置中心对应的名称
spring.application.name=gulimall-coupon
#地址
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
启动项目找到应该设置的配置中心的名字
配置 配置中心
测试
在application.properties 随便写点东西
coupon.user.name=asdjfk
coupon.user.age=18_
@value("")调用过来
@Value("${coupon.user.age}")
String age;
@Value("${coupon.user.name}")
String name;
@RequestMapping("/f")
public R t(){
return R.ok().put("age,",age).put("name",name);
}
启动项目,访问路径,得到结果后,在配置中心修改配置,这里仍然不会动态刷新 需要在
调用的类上加上
@RefreshScope
来实现动态刷新
测试,成功
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)