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.jarjava -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.jarjava -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.jarjava -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
    {@Setterprivate Throwable cause;// 这里定义了出现接口调用错误的回调@Overridepublic 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> {@Overridepublic IThirdSideAPI create(Throwable throwable) {ThirdSideAPIFallback fallback = new ThirdSideAPIFallback();fallback.setCause(throwable);return fallback;}
    }
    

Client端的调用

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

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

调用结果:

third-side服务正常时:

在这里插入图片描述

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


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部