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增加微服务模块
- 参照文档将jeecg-boot改造成微服务工程:http://doc.jeecg.com/2020250
- 增加新的微服务模块
- 就是增加maven模块,如果出现新的微服务模块无法引用父模块,请参照https://blog.csdn.net/jackson_hou03/article/details/109452803
Feign实现微服务间接口调用
参考文档http://doc.jeecg.com/1925336将接口统一定义在一个模块中,方便维护。
-
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(); }
-
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; } }
-
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端的调用
-
首先在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服务异常触发熔断时,就会返回空,并且日志有打印