jeecg分布式框架部署笔记

docker部署nacos

# 拉取最新的nacos镜像版本
docker pull nacos/nacos-server

# 初始化数据库脚本
https://github.com/alibaba/nacos/blob/master/config/src/main/resources/META-INF/nacos-db.sql

# 启动镜像
docker run -d \
-e TZ="Asia/Shanghai" \
-e MODE=standalone \
-e SPRING_DATASOURCE_PLATFORM=mysql \
-e MYSQL_SERVICE_HOST=192.168.29.252 \
-e MYSQL_SERVICE_PORT=3306 \
-e MYSQL_SERVICE_USER=root \
-e MYSQL_SERVICE_PASSWORD=root \
-e MYSQL_SERVICE_DB_NAME=nacos \
-p 8848:8848 \
--expose=8848 \
--name nacos \
--restart=always \
nacos/nacos-server

# 访问,docker启动后并不是立马能访问,要稍微等一下,因为docker内部还在启动nacos
http://192.168.29.252:8848/nacos

配置信息放到nacos上,请参考文档http://doc.jeecg.com/1874898

启动elasticsearch

# 启动elasticsearch,所在磁盘空间小于90%时,es会开启只读模式,就是无法往里面写数据
docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -v /home/android/hyb/es/data:/usr/share/elasticsearch/data -v /home/android/hyb/es/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml -e ES_JAVA_OPTS="-Xms256m -Xmx512m" -e "discovery.type=single-node" elasticsearch:7.6.2

# elasticsearch.yml配置
cluster.name: "docker-cluster"
network.host: 0.0.0.0
http.cors.enabled: true
http.cors.allow-origin: "*"
cluster.routing.allocation.disk.threshold_enabled: false

# 查看es有没有启动好
http://192.168.29.252:9200/

# 启动elasticsearch-head
docker pull mobz/elasticsearch-head:5
docker run -d -p 9100:9100 mobz/elasticsearch-head:5
http://192.168.29.252:9100

#发现连接不上,是因为有跨域问题,因为前后端分离开发的所以需要设置一下es
#进入刚刚启动的 es 容器,容器name = es
docker exec -it elasticsearch /bin/bash
#修改elasticsearch.yml文件
vi config/elasticsearch.yml
#添加
http.cors.enabled: true
http.cors.allow-origin: "*"
#其实就是SpringBoot的yml文件 添加跨域支持
#退出容器 并重启
exit
docker restart elasticsearch

在这里插入图片描述

部署skywalking

下载部署文件:https://archive.apache.org/dist/skywalking/

# oapservice启动报错,SkyWalking UI界面无法访问(如果按照配置还是没有UI界面就等一会,20201113尝试es都是正常,就是无法访问UI,然后等了一会就好了,应该是后台在启动过程中)
2020-10-19 16:54:58,621 - org.apache.skywalking.oap.server.telemetry.api.HealthCheckMetrics - 42 [main] ERROR [] - Health check fails
org.elasticsearch.ElasticsearchStatusException: Elasticsearch exception [type=cluster_block_exception, reason=index [docker-cluster_ui_template] blocked by: [FORBIDDEN/12/index read-only / allow delete (api)];]

# 解决方法:
docker exec -it elasticsearch /bin/bash
vi config/elasticsearch.yml
# 增加一行配置:cluster.routing.allocation.disk.threshold_enabled: false
# 清除只读配置
curl -XPUT -H "Content-Type: application/json" http://localhost:9200/_all/_settings -d '{"index.blocks.read_only_allow_delete": null}'

skywalking配置

  • apache-skywalking-apm-bin-es7/config/application.yml

在这里插入图片描述

  • apache-skywalking-apm-bin-es7/webapp/webapp.yml

在这里插入图片描述

skywalking启动

apache-skywalking-apm-bin-es7/bin/startup.sh
# 进apache-skywalking-apm-bin-es7/logs查看启动日志

在这里插入图片描述

解决skywalking没有数据的问题

  • 查看skywalking的后端日志
#启动每个服务
# 这是一个测试的模块,jeecg源码中没有
java -javaagent:/home/android/hyb/apache-skywalking-apm-bin-es7/agent/skywalking-agent.jar -Dskywalking.agent.service_name=third-side-service -Dskywalking.collector.backend_service=192.168.29.252:11800 -jar /home/android/hyb/web/jeecg-boot-module-third-side-2.3.0.jar

java -javaagent:/home/android/hyb/apache-skywalking-apm-bin-es7/agent/skywalking-agent.jar -Dskywalking.agent.service_name=demo-service -Dskywalking.collector.backend_service=192.168.29.252:11800 -jar /home/android/hyb/web/jeecg-boot-module-demo-2.3.0.jar

java -javaagent:/home/android/hyb/apache-skywalking-apm-bin-es7/agent/skywalking-agent.jar -Dskywalking.agent.service_name=system-service -Dskywalking.collector.backend_service=192.168.29.252:11800 -jar /home/android/hyb/web/jeecg-boot-module-system-2.3.0.jar

java -javaagent:/home/android/hyb/apache-skywalking-apm-bin-es7/agent/skywalking-agent.jar -Dskywalking.agent.service_name=gateway-service -Dskywalking.collector.backend_service=192.168.29.252:11800 -jar /home/android/hyb/web/jeecg-cloud-gateway-2.3.0.jar

# http://192.168.29.252:38080/
# 如果查看不到数据,尝试修改右下角的时间跨度

在这里插入图片描述

集成Sentinel

https://blog.csdn.net/LSY_CSDN_/article/details/105112174

# docker部署Sentinel
docker run --name sentinel -d -p 8858:8858  bladex/sentinel-dashboard

# 浏览器访问
http://192.168.29.252:8858/

# account and password: [sentinel sentinel]

Jeecg-cloud2.3增加微服务模块

  1. 参照文档将jeecg-boot改造成微服务工程:http://doc.jeecg.com/2020250
  2. 增加新的微服务模块
    • 就是增加maven模块,如果出现新的微服务模块无法引用父模块,请参照https://blog.csdn.net/jackson_hou03/article/details/109452803

Feign实现微服务间接口调用

参考文档http://doc.jeecg.com/1925336将接口统一定义在一个模块中,方便维护。

在这里插入图片描述

  1. IThirdSideAPI:定义接口

    package org.jeecg.common.third.api;
    
    import org.jeecg.common.api.vo.Result;
    import org.jeecg.common.constant.ServiceNameConstants;
    import org.jeecg.common.third.api.factory.ThirdSideAPIFallbackFactory;
    import org.springframework.cloud.openfeign.FeignClient;
    import org.springframework.stereotype.Component;
    import org.springframework.web.bind.annotation.GetMapping;
    
    @Component
    @FeignClient(contextId = "thirdSideRemoteApi", value = "third-side", fallbackFactory = ThirdSideAPIFallbackFactory.class)
    // 这里的"third-side"是新创建的微服务的服务名称,见下图
    // thirdSideRemoteApi就是唯一标示,保证唯一就行
    public interface IThirdSideAPI
    {
        // 这里的路径就是third-side微服务中对应接口的请求路径,见下图
        @GetMapping("/third-side/test")
        Result<?> test();
    }
    

在这里插入图片描述
在这里插入图片描述

  1. ThirdSideAPIFallback:出现异常的回调

    package org.jeecg.common.third.api.fallback;
    
    import lombok.Setter;
    import lombok.extern.slf4j.Slf4j;
    import org.jeecg.common.api.vo.Result;
    import org.jeecg.common.third.api.IThirdSideAPI;
    
    @Slf4j
    public class ThirdSideAPIFallback implements IThirdSideAPI
    {
        @Setter
        private Throwable cause;
        
        // 这里定义了出现接口调用错误的回调
        @Override
        public Result<?> test()
        {
            log.error("第三方测试 {}", cause);
            return null;
        }
    }
    
  2. ThirdSideAPIFallbackFactory:定义熔断器

    package org.jeecg.common.third.api.factory;
    
    import feign.hystrix.FallbackFactory;
    import org.jeecg.common.third.api.IThirdSideAPI;
    import org.jeecg.common.third.api.fallback.ThirdSideAPIFallback;
    import org.springframework.stereotype.Component;
    
    @Component
    public class ThirdSideAPIFallbackFactory implements FallbackFactory<IThirdSideAPI> {
    
        @Override
        public IThirdSideAPI create(Throwable throwable) {
            ThirdSideAPIFallback fallback = new ThirdSideAPIFallback();
            fallback.setCause(throwable);
            return fallback;
        }
    }
    

Client端的调用

  1. 首先在pom.xml文件中应用接口模块

    <dependency>
        <groupId>org.jeecgframework.boot</groupId>
        <artifactId>jeecg-system-cloud-api</artifactId>
    </dependency>
    
    @Autowired
    private IThirdSideAPI thirdSideAPI;
    
    @GetMapping(value = "/invokeThirdSide")
    public Result<?> invokeThirdSide()
    {
        return thirdSideAPI.test();
    }
    

调用结果:

third-side服务正常时:

在这里插入图片描述

third-side服务异常触发熔断时,就会返回空,并且日志有打印
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值