谷粒商城02 spring cloud Alibaba

谷粒商城02 spring cloud Alibaba

1.修改spring boot的版本

修改版本与项目的版本一致,防止springboot cloud alibaba冲突 手动修改版本号更新maven会不起作用可以invalidate cache

    <parent>
        <artifactId>spring-boot-starter-parent</artifactId>
        <groupId>org.springframework.boot</groupId>
        <version>2.1.8.RELEASE</version>
    </parent>

2.引入spring cloud Alibaba

在common模块引入

<dependencyManagement>
    <dependencies>
        <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-alibaba-dependencies</artifactId>
        <version>2.1.0.RELEASE</version>
        <type>pom</type>
        <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

3.nacos注册中心

先在common引入注册中心发现

<!--        注册中心-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>org.springframework.cloud</groupId>
                    <artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

下载nacos最新版的会出错,选择1.4版本,而且打开不是直接双击bin文件下的startup.sh 是通过该.\startup.cmd -m standalone启动,还得记得给每个微服务配置一个端口

配置给每个微服务指定注册中心地址以及服务名

  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
   application:
    name: guli-coupon

在启动类开启服务注册与发现

@EnableDiscoveryClient

4.利用openfeign远程调用

基于http的

使用步骤

  • 导入openfeign的依赖
  • 开启@EnableFeignClients
  • 编写接口远程调用

5.使用openfeign调用例子

先配置openfeign依赖

 <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
 </dependency>

member调用coupon的例子

首先在coupon开发一个被调用的接口,coupon模块只需要继承openfeign的依赖即可

//在CouponController写了个测试接口
 @RequestMapping("/test")
    public R test(){
        CouponEntity couponEntity = new CouponEntity();
        couponEntity.setCouponName("满一千减500");
        return R.ok().put("name",Arrays.asList(couponEntity));
    }

其次在member模块中调用这个接口

因为是调用其它模块的,所以最好建个feign的文件夹专门调用

//在新建文件夹下写CouponFeignService
@FeignClient("guli-coupon") //注册中心的名字
public interface CouponFeignService {
    //直接在coupon模块的方法名和请求链路和方式直接拷贝
    @RequestMapping("coupon/coupon/test")
    public R test();
}

再次修改memberController,添加一个测试方法

   @RequestMapping("test")
   public R test(){
        MemberEntity soup = new MemberEntity();
        soup.setNickname("汤");
        R test = couponFeignService.test();//获取到优惠卷
       return R.ok().put("name",soup).put("coupon",test.get("coupons"));
    }

最后在member启动文件中添加@EnableFeignClients(“com.atguigu.gulimail.member.feign”)

扫描到接口的加入spring容器吧?

访问接口,间接调用coupon

http://localhost:7001/member/member/test

返回数据

{
	"msg": "success",
	"code": 0,
	"coupon": [
		{
			"id": null,
			"couponType": null,
			"couponImg": null,
			"couponName": "满一千减500",
			"num": null,
			"amount": null,
			"perLimit": null,
			"minPoint": null,
			"startTime": null,
			"endTime": null,
			"useType": null,
			"note": null,
			"publishCount": null,
			"useCount": null,
			"receiveCount": null,
			"enableStartTime": null,
			"enableEndTime": null,
			"code": null,
			"memberLevel": null,
			"publish": null
		}
	],
	"name": {
		"id": null,
		"levelId": null,
		"username": null,
		"password": null,
		"nickname": "汤",
		"mobile": null,
		"email": null,
		"header": null,
		"gender": null,
		"birth": null,
		"city": null,
		"job": null,
		"sign": null,
		"sourceType": null,
		"integration": null,
		"growth": null,
		"status": null,
		"createTime": null
	}
}

6.配置中心

首先引入配置中心依赖到common模块

<dependency>
      <groupId>com.alibaba.cloud</groupId>
      <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>

在bootstrap.properties设置配置中心的名字和地址,他优先于application.yml启动

spring.application.name=gulimail-member #配置中心名字
spring.cloud.nacos.config.server-addr=127.0.0.1:8848 #配置中心地址

在模块中随意写一些配置,并使用 以 application.properties格式

member.user.name=soup
member.user.age=26

在controller中使用这些配置

 //使用的类名前添加,动态刷新配置
 @RefreshScope
 
 @Value("${member.user.name}")
 String name;
 @Value("${member.user.age}")
 int age;
 

要动态的修改配置信息,需要查看日志输出的

Located property source: CompositePropertySource {name='NACOS', propertySources=[NacosPropertySource {name='gulimail-coupon.properties'}]}

查看到name在配置中心新建一个gulimail-coupon.properties会自动连接到项目的application.properties配置中即可动态修改

7.命名空间与配置分组

命名空间

配置隔离 不同的命名空间下,可以存在相同的Group 或Data ID 配置 就是开发环境有开发的配置,测试有测试的,也可以针对的设置对微服务的命名空间,每个微服务都有一个对应的命名空间

配置分组

每个命名空间下可以设置不同的分组,用于针对不通场景使用

配置中心配置分组

输出情况

8.加载多配置集

删除了原有的配置application.yml配置集合,分割配置信息到配置中心

#bootstrap.properties配置
spring.application.name=gulimail-coupon
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
spring.cloud.nacos.config.namespace=fc56b6c4-9f1d-4387-96b1-e5239454abf1
#把这行注释了话那么会优先选择项目内的文件而不会匹配到nacos的 
spring.cloud.nacos.config.group=dev 

spring.cloud.nacos.config.ext-config[0].data-id=datasource.yml
spring.cloud.nacos.config.ext-config[0].group=dev
spring.cloud.nacos.config.ext-config[0].refresh=true

spring.cloud.nacos.config.ext-config[1].data-id=mybatis.yml
spring.cloud.nacos.config.ext-config[1].group=dev
spring.cloud.nacos.config.ext-config[1].refresh=true

spring.cloud.nacos.config.ext-config[2].data-id=other.yml
spring.cloud.nacos.config.ext-config[2].group=dev
spring.cloud.nacos.config.ext-config[2].refresh=true

查看是否在配置中心使用分割后的

9.网关

网关的作用

网关工作原理

断言 predicates This lets you match on anything from the HTTP request, such as headers or parameters

路由规则routes:断言处理给特定路由

filter:符合路由规则则设定过滤

创建网关模块

加入依赖

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-gateway</artifactId>
        </dependency>

在application.yml配置网关

spring:
  cloud:
    gateway:
      routes:
        - id: test_route
          uri: http://www.baidu.com
          predicates:
            - Query=url,baidu

        - id: qq_route
          uri: https://www.qq.com
          predicates:
            - Query=url,qq

再配置nacos的注册中心和配置中心以及设置注册发现启动访问

http://localhost:88/?url=baidu //路由跳转到百度

打赏一个呗

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦