栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

SpringCloud Alibaba配置使用整合

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

SpringCloud Alibaba配置使用整合

一、Nacos注册中心 1、pom.xml配置依赖

    com.alibaba.cloud
    spring-cloud-starter-alibaba-nacos-discovery
2、application.yml配置Nacos服务中心地址
spring:
  application:
    name: product
  cloud:
    nacos:
      discovery:
        server-addr:  127.0.0.1:8848
3、通过@NacosInjected注入Nacos地NamingService 4、使用Nacos提供的OpenAPI方法

(1)注册实例

  1. registerInstance(serviceName, ip, port)
  2. registerInstance(serviceName, ip, port, clusterName)
  3. registerInstance(serviceName, instance)

(2)获取实例

  1. getAllInstances(serviceName)
  2. getAllInstances(serviceName, clusters)

(3)监听服务

  1. subscribe(serviceName, listener)
  2. subscribe(serviceName, clusters, listener)

【Dubbo】 

5、Dubbo使用Nacos实现注册中心 (1)application.properties
dubbo.application.name: spring-boot-dubbo-nacos-sample
dubbo.registry.address=nacos://127.0.0.1:8848

dubbo.protocol.name=dubbo
dubbo.protocol.port=20880
(2)通过Dubbo的@Service声明 (3)启动类使用@DubboComponentScan扫描@Service 二、Nacos配置中心 1、pom.xml配置依赖

    com.alibaba.cloud
    spring-cloud-starter-alibaba-nacos-config
2、bootstrap.properties配置Nacos配置中心地址
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
spring.cloud.nacos.config.namespace=6ca49aac-50ec-4e6f-8686-70bb11922fdd
3、使用注解从NacosServer动态读取配置
@NacosPropertySource(dataId = "example", autoRefreshed = true)
@RestController
public class NacosConfigController{
    
    @NacosValue(value = "${info:Local Hello World}", autoRefreshed = true)
    private String info;

    @GetMapping("/config")
    public String get(){
        return info;
    }
}

(1)@NacosPropertySource:用于加载dataId为example地配置源,autoRefreshed表示开启自动更新;

(2)@NacosValue:设置属性的默认值

4、使用Nacos提供的OpenAPI方法 三、Dubbo

【服务提供者】

1、pom.xml配置依赖

    com.springframework.boot
    spring-boot-starter


    org.apache.dubbo
    dubbo-spring-boot-starter
    2.7.5
2、application.properties配置Dubbo服务
spring.application.name=spring-dubbo-demo

dubbo.application.name=springboot-provider
dubbo.protocol.name=dubbo
dubbo.protocol.port=20880
dubbo.registry.address=N/A
3、声明Dubbo提供的@Service注解发布服务
@Service
public class HelloServiceImpl implements HelloService{

    @value("${dubbo.application.name}")
    private String servicename;
    
    @Override
    public String sayHello(String name){
        return servicename;
    }
}
4、启动方法上添加@DubboComponentScan,用来扫描Dubbo声明的@Service
@DubboComponentScan
@SpringBootApplication
public class ProviderApplication{
    public static void main(Sting[] args){
        SpringApplication.run(ProviderApplication.class, args);
    }
}

【服务调用者】

1、pom.xml配置依赖

    org.apache.dubbo
    dubbo-spring-boot-starter
    2.7.5
2、application.properties配置Dubbo服务
dubbo.application.name=springboot-consumer
3、使用Dubbo提供的@Reference注解获取远程代理服务对象
@Reference(url = "dubbo://192.168.13.1:20880/com.gupaoedu.book.dubbo.helloService")
private HelloService helloService;

【高级配置】 

1、集群容错
@Service(cluster = "failfast")
容错模式

(1)Failover Cluster:失败自动切换。调用失败后,切换到集群中其他机器,默认重试两次。

(2)Failfast Cluster:快速失败。调用失败后,立即报错,只发起依次调用。

(3)Failsafe Cluster:失败安全。出现异常时,直接忽略。

(4)Failback Cluster:失败后自动回复。后台记录失败请求,定时重发。

(5)Forking Cluster:并行调用集群中的多个服务,只要其中一个成功就返回。

(6)Broadcast Cluster:广播调用所有的服务提供者,任意一个服务报错则表示服务调用失败。

2、负载均衡
@Service(cluster = "failfast", loadbalance = "roundrobin")
负载均衡策略

(1)Random LoadBalance:随机算法。可能针对性能较好的服务器设置较大的权重值。

(2)RoundRobin LoadBalance:轮询。按照公约后的权重设置轮询比例。

(3)LeastActive LoadBalance:最少活跃调用书。处理较慢的节点将会收到更少的请求。

(4)ConsistentHash LoadBalance:一致性Hash。相同参数的请求总是发送到同一个服务提供者。

3、服务降级 (1)创建降级本地数据默认返回
public class MockHelloService implements HelloService{
    @Override
    public String sayHello(String s){
        return "Sorry, 服务无法访问, 返回降级数据";
    }
}
(2)@Reference注解增加Mock参数
@Reference(mock = "com.gupaoedu.book.springcloud.springclouddubboconsumer.MockHelloService", cluster = "failfast")
private HelloService helloService;
4、主机绑定 (1)Dubbo服务对外发布的IP地址,默认顺序
  1. 查找环境变量中的DUBBO_IP_TO_BIND属性配置的IP地址
  2. 查找dubbo.protocol.host属性配置的IP地址,默认是空
  3. 通过LocalHost.getHostAddress获取本机IP地址
  4. 注册中心的地址,使用Socket通信连接到注册中心的地址后,使用for循环通过socket.getLocalAddress().getHostAddress()扫描各个网卡获取网卡IP地址
(2)服务消费者无法正常调用情况解决办法
  1. /etc/hosts中配置机器名对应正确的IP地址映射
  2. 环境变量添加DUBBO_IP_TO_BIND或者DUBBO_IP_TO_REGISTRY属性
  3. 通过dubbo.protocol.host设置主机地址

无法正常调用原因:Dubbo通过获取本机的hostname映射IP地址,如果IP地址错误,依然会注册ZooKeeper,并且正常启动。 

四、Feign 1、pom.xml引入依赖

    org.springframework.cloud
    spring-cloud-starter-openfeign
2、定义接口,通过@FeignClient注解指定服务名来绑定服务

        声明接口的每一个方法都是调用哪个远程服务的哪个请求

@FeignClient("whalemall-coupon")
public interface CouponFeignService {

    @PostMapping("/coupon/spubounds/save")
    R saveSpuBounds(@RequestBody SpuBoundTo spuBoundTo);

    @PostMapping("/coupon/skufullreduction/saveinfo")
    R saveSkuReduction(@RequestBody SkuReductionTo skuReductionTo);
}
3、启动类通过@EnableFeignClients注解开启Spring Cloud Feign
@EnableFeignClients(basePackages = "com.island.whalemall.product.feign")
@EnableDiscoveryClient
@MapperScan("com.island.whalemall.product.dao")
@SpringBootApplication
public class WhalemallProductApplication {

    public static void main(String[] args) {
        SpringApplication.run(WhalemallProductApplication.class, args);
    }

}
五、Gateway 1、pom.xml添加依赖

    org.springframework.cloud
    spring-cloud-starter-gateway
2、application.yml文件中添加Gateway的路由配置
spring:
  cloud:
    gateway:
      routes:
#       商品服务
        - id:  product_route
          uri: lb://whalemall-product
          predicates:
            - Path=/api/product
    @Value("${elasticsearch.ip}")
    String ipPort;

    @Bean
    public RestClientBuilder restClientBuilder() {

        return RestClient.builder(makeHttpHost(ipPort));
    }


    @Bean(name = "highLevelClient")
    public RestHighLevelClient highLevelClient(@Autowired RestClientBuilder restClientBuilder) {
        restClientBuilder.setMaxRetryTimeoutMillis(60000);
        return new RestHighLevelClient(restClientBuilder);
    }


    private HttpHost makeHttpHost(String s) {
        String[] address = s.split(":");
        String ip = address[0];
        int port = Integer.parseInt(address[1]);
        
        return new HttpHost(ip, port, "http");
    }
}
4、添加
localhost:9200/customer/_doc/1?pretty
{
    "city": "北京",
    "useragent": "Mobile Safari",
    "sys_version": "Linux armv8l",
    "province": "北京",
    "event_id": "",
    "log_time": 1559191912,
    "session": "343730"
}
5、条件查询
@Service
    public class TestService {
        @Autowired
        RestHighLevelClient highLevelClient;

        private void search(RestHighLevelClient highLevelClient) throws IOException {

            SearchRequest searchRequest = new SearchRequest();
            searchRequest.indices("customer");
            searchRequest.types("_doc");

            // 条件=
            MatchQueryBuilder matchQuery = QueryBuilders.matchQuery("city", "北京");
            TermQueryBuilder termQuery = QueryBuilders.termQuery("province", "福建");
            // 范围查询
            RangeQueryBuilder timeFilter = QueryBuilders.rangeQuery("log_time").gt(12345).lt(343750);
            SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();

            QueryBuilder totalFilter = QueryBuilders.boolQuery()
                    .filter(matchQuery)
                    .filter(timeFilter)
                    .mustNot(termQuery);

            int size = 200;
            int from = 0;
            long total = 0;

            do {
                try {
                    sourceBuilder.query(totalFilter).from(from).size(size);
                    sourceBuilder.timeout(new Timevalue(60, TimeUnit.SECONDS));
                    searchRequest.source(sourceBuilder);

                    SearchResponse response = highLevelClient.search(searchRequest);
                    SearchHit[] hits = response.getHits().getHits();
                    for (SearchHit hit : hits) {
                        System.out.println(hit.getSourceAsString());
                    }

                    total = response.getHits().totalHits;

                    System.out.println("测试:[" + total + "][" + from + "-" + (from + hits.length) + ")");

                    from += hits.length;

                    // from + size must be less than or equal to: [10000]
                    if (from >= 10000) {
                      System.out.println("测试:超过10000条直接中断");
                      break;
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }
            } while (from < total);
        }
    }

十一、MySQL 1、pom.xml引入MySQL依赖

    mysql
    mysql-connector-java



    org.springframework.boot
    spring-boot-starter-jdbc




    org.apache.commons
    commons-dbcp2
2、application.properties
spring.datasource.url=jdbc:mysql://localhost:3306/spring_boot_chapter5
spring.datasource.username=root
spring.datasource.password=123456

# 即使注释掉了驱动,SpringBoot会尽可能判断数据源,然后默认匹配
# spring.datasource.driver-class-name=com.mysql.jdbc.Driver
# 指定数据库连接池类型
spring.datasource.type=org.apache.commons.dbcp2.BasicDataSource

# 最大等待连接中的数量,设 0 为没有限制
spring.datasource.dbcp2.max-idle=10
# 最大连接活动数
spring.datasource.dbcp2.max-total=50
# 最大等待毫秒数,单位ms
spring.datasource.dbcp2.max-wait-millis=10000
# 数据库连接池初始化连接数
spring.datasource.dbcp2.initial-size=5
3、使用MyBatis框架 (1)pom.xml引入依赖

    org.mybatis.spring.boot
    mybatis-spring-boot-starter
    1.3.1
(2)application.properties
# MyBatis映射文件通配
mybatis.mapper-locations=classpath:com/springboot/chapter/mapper/*.xml
# Mybatis扫描别名包,和注解@Alias联用
mybatis.type-aliases-package=com.springboot.chapter.pojo
# 配置typeHandler的扫描包
mybatis.type-handlers-package=com.springboot.chapter.typehandler

可配置属性

  1. properties :属性
  2. settings:设置
  3. typeAliases:类型别名
  4. typeHandlers:类型处理器
  5. objectFactory:对象工厂
  6. plugins:插件
  7. environments:数据库环境
  8. databaseIdProvider:数据库厂商标识
  9. mappers:映射器
(3)使用@Mapper注解表示Mapper(Dao)接口 (4)启动类使用@MapperScan()扫描 十二、Redis 1、pom.xml引入Redis依赖

    redis.clients
    jedis



    org.springframework.boot
    spring-boot-starter-redis
    
        
            io.lettuce
            lettuce-core
        
    
2、application.properties
# 配置连接池属性
spring.redis.jedis.pool.min-idle=5
spring.redis.jedis.pool.max-idle=10
spring.redis.jedis.pool.max-active=10
spring.redis.jedis.pool.max-wait=2000

# 配置Redis服务器属性
spring.redis.port=6379
spring.redis.host=192.168.11.131
spring.redis.password=123456

# Redis连接超时时间,单位ms
spring.redis.timeout=1000
3、使用springboot提供的StringRedisTemplate来操作redis(是对jedis的再次封装)
ValueOperations ops = stringRedisTemplate.opsForValue();

//保存

ops.set("hello", "world_" + UUID.randomUUID().toString());

//查询

String hello = ops.get("hello");
十三、MongoDB
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/530959.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号