SpringCloudalibaba+RocketMQ

SpringCloud alibaba

Springcloud alibaba
	1.nacos(纳可丝) 服务治理(注册 发现)
    2.Sentinel(生特洛)   哨兵
    3.ribbon(瑞本)   负载均衡
    4.Gateway(给特喂) 网关
		1.概念
    	2.执行流程
    	3.断言 系统断言 自定义断言
    	4.过滤器 系统过滤器 自定义过滤器 全局过滤器 局部过滤器
    		全局过滤器 实现GlobalFilter, Ordered两个接口
    	5.限流
    		route
    		自定义分组
    		
    5.feign(非恩) 远程调用	
    6.sleuth 链式追踪 		  (父模块依赖)
    7.ZipKin 默认存储在内存中  (父模块依赖)
    8.sleuth+ZipKin:集成一个可视化的链路追踪
    9.搭建RocketMQ控制台
    	1).在liunx搭建控制台
    	2).代码访问rocketmq
    	

	
--
//Gateway执行流程
从客户端请求到网关-网关进行断言-断言成功到执行之前过滤器-过滤器放行到服务器-然后到执行之后的的过滤器-再响应给客户端

6.链式追踪

在大型系统的微服务化构建中,一个系统被拆分成了许多模块。这些模块负责不同的功能,组合成
系统,最终可以提供丰富的功能。在这种架构中,一次请求往往需要涉及到多个服务。互联网应用构建
在不同的软件模块集上,这些软件模块,有可能是由不同的团队开发、可能使用不同的编程语言来实
现、有可能布在了几千台服务器,横跨多个不同的数据中心,也就意味着这种架构形式也会存在一些问
题:

如何快速发现问题?
如何判断故障影响范围?
如何梳理服务依赖以及依赖的合理性?
如何分析链路性能问题以及实时容量规划?

概述

SpringCloud Sleuth主要功能就是在分布式系统中提供追踪解决方案。它大量借用了Google

<!--链路追踪 Sleuth-->
 <dependency> 
	 <groupId>org.springframework.cloud</groupId> 
	 <artifactId>spring-cloud-starter-sleuth</artifactId>
 </dependency>

7.ZipKin

Zipkin 是 Twitter 的一个开源项目,它基于Google Dapper实现,它致力于收集服务的定时数据,
以解决微服务架构中的延迟问题,包括数据的收集、存储、查找和展现

<!--下载jar包,服务端-->
https://search.maven.org/remote_content?g=io.zipkin.java&a=zipkin- server&v=LATEST&c=exec

<!--到jar包目录,cmd执行下面-->
java -jar zipkin-server-2.12.9-exec.jar


<!--访问-->
http://localhost:9411

7.sleuth+ZipKin集成

<!--依赖-->
<dependency>
 	<groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-zipkin</artifactId> 
 </dependency>
<!--到需要追踪的服务,核心配置文件配置-->
#zipkin server的请求地址
spring.zipkin.base-url=http://127.0.0.1:9411/
#让nacos把它当成一个URL,而不要当做服务名
spring.zipkin.discovery-client-enabled=false
#采样的百分比
spring.sleuth.sampler.probability=1.0
访问微服务
然后到zipkin的ui界面点击"查找"

8.ZipKin持久化

Zipkin Server默认会将追踪数据信息保存到内存,但这种方式不适合生产环境。Zipkin支持将追踪
数据持久化到mysql数据库或elasticsearch中。

使用mysql数据持久化

第1步:创建mysql数据环境:创建zipkin数据库
第2步:创建表

CREATE TABLE IF NOT EXISTS zipkin_spans ( `trace_id_high` BIGINT NOT NULL DEFAULT 0 COMMENT 'If non zero, this means the trace uses 128 bit traceIds instead of 64 bit', `trace_id` BIGINT NOT NULL, `id` BIGINT NOT NULL, `name` VARCHAR(255) NOT NULL, `parent_id` BIGINT, `debug` BIT(1), `start_ts` BIGINT COMMENT 'Span.timestamp(): epoch micros used for endTs query and to implement TTL',
`duration` BIGINT COMMENT 'Span.duration(): micros used for minDuration and maxDuration query' ) ENGINE=InnoDB ROW_FORMAT=COMPRESSED CHARACTER SET=utf8 COLLATE utf8_general_ci; ALTER TABLE zipkin_spans ADD UNIQUE KEY(`trace_id_high`, `trace_id`, `id`) COMMENT 'ignore insert on duplicate'; ALTER TABLE zipkin_spans ADD INDEX(`trace_id_high`, `trace_id`, `id`) COMMENT 'for joining with zipkin_annotations'; ALTER TABLE zipkin_spans ADD INDEX(`trace_id_high`, `trace_id`) COMMENT 'for getTracesByIds'; ALTER TABLE zipkin_spans ADD INDEX(`name`) COMMENT 'for getTraces and getSpanNames'; ALTER TABLE zipkin_spans ADD INDEX(`start_ts`) COMMENT 'for getTraces ordering and range'; CREATE TABLE IF NOT EXISTS zipkin_annotations ( `trace_id_high` BIGINT NOT NULL DEFAULT 0 COMMENT 'If non zero, this means the trace uses 128 bit traceIds instead of 64 bit', `trace_id` BIGINT NOT NULL COMMENT 'coincides with zipkin_spans.trace_id', `span_id` BIGINT NOT NULL COMMENT 'coincides with zipkin_spans.id', `a_key` VARCHAR(255) NOT NULL COMMENT 'BinaryAnnotation.key or Annotation.value if type == -1', `a_value` BLOB COMMENT 'BinaryAnnotation.value(), which must be smaller than 64KB', `a_type` INT NOT NULL COMMENT 'BinaryAnnotation.type() or -1 if Annotation', `a_timestamp` BIGINT COMMENT 'Used to implement TTL; Annotation.timestamp or zipkin_spans.timestamp', `endpoint_ipv4` INT COMMENT 'Null when Binary/Annotation.endpoint is null', `endpoint_ipv6` BINARY(16) COMMENT 'Null when Binary/Annotation.endpoint is null, or no IPv6 address', `endpoint_port` SMALLINT COMMENT 'Null when Binary/Annotation.endpoint is null',`endpoint_service_name` VARCHAR(255) COMMENT 'Null when Binary/Annotation.endpoint is null' ) ENGINE=InnoDB ROW_FORMAT=COMPRESSED CHARACTER SET=utf8 COLLATE utf8_general_ci; ALTER TABLE zipkin_annotations ADD UNIQUE KEY(`trace_id_high`, `trace_id`, `span_id`, `a_key`, `a_timestamp`) COMMENT 'Ignore insert on duplicate'; ALTER TABLE zipkin_annotations ADD INDEX(`trace_id_high`, `trace_id`, `span_id`) COMMENT 'for joining with zipkin_spans'; ALTER TABLE zipkin_annotations ADD INDEX(`trace_id_high`, `trace_id`) COMMENT 'for getTraces/ByIds'; ALTER TABLE zipkin_annotations ADD INDEX(`endpoint_service_name`) COMMENT 'for getTraces and getServiceNames';
ALTER TABLE zipkin_annotations ADD INDEX(`a_type`) COMMENT 'for getTraces'; ALTER TABLE zipkin_annotations ADD INDEX(`a_key`) COMMENT 'for getTraces'; ALTER TABLE zipkin_annotations ADD INDEX(`trace_id`, `span_id`, `a_key`) COMMENT 'for dependencies job'; CREATE TABLE IF NOT EXISTS zipkin_dependencies ( `day` DATE NOT NULL, `parent` VARCHAR(255) NOT NULL, `child` VARCHAR(255) NOT NULL, `call_count` BIGINT ) ENGINE=InnoDB ROW_FORMAT=COMPRESSED CHARACTER SET=utf8 COLLATE utf8_general_ci; ALTER TABLE zipkin_dependencies ADD UNIQUE KEY(`day`, `parent`, `child`);

第3步:开启zipkin服务

java -jar zipkin-server-2.12.9-exec.jar    --STORAGE_TYPE=mysql --MYSQL_HOST=127.0.0.1  
--MYSQL_TCP_PORT=3306 --MYSQL_DB=zipkin --MYSQL_USER=root --MYSQL_PASS=root

然后访问微服务,在zipkin看到链式追踪信息,关闭zipkin服务,再开启zipkin服务,不访问微服务直接有链式追踪信息,就代表持久化了

9.1搭建RocketMQ控制台

  • 1.liunx上搭建
// 1.到安装目录
// 2.启动NameServer
nohup ./bin/mqnamesrv &

//3. 启动Broker
nohup bin/mqbroker -n localhost:9876 &

//4.下载RocketMQ控制台
//在git上下载下面的工程 rocketmq-console-1.0.0
https://github.com/apache/rocketmq-externals/releases

//5.解压拿到文件,到src/main下的配置文件
server.port=7777 //项目启动后的端口号  7777在liunx上开放
rocketmq.config.namesrvAddr=192.168.109.131:9876   //ip:liunx的  port:rocketmq服务端口 9876也开放后面可以用

//6.在pom目录cmd执行
mvn clean package -Dmaven.test.skip=true //打包成jar

//7.在target下的jar复制到liunx去
rocketmq-console-ng-1.0.0.jar

//8.到jar所在地执行
java -jar rocketmq-console-ng-1.0.0.jar &

//9.访问
http://192.168.31.35:7777

//关闭Broker
bin/mqshutdown broker
//关闭NameServer
bin/mqshutdown namesrv
  • 2.代码访问服务端

    • 1).因为rocketmq默认访问自己的内网,所以需要自己设置安装目录的conf/broker.conf

在这里插入图片描述

  • 2).启动

注意:9876端口放行,配置完最好重启一下liunx

启动NameServer:

  nohup ./bin/mqnamesrv &

启动broker

nohup sh bin/mqbroker -n 192.168.31.35:9876 autoCreateTopicEnable=true -c conf/broker.conf &  

查看是否启动了

//日志
tail -f /root/logs/rocketmqlogs/namesrv.log   
//查看端口的进程
netstat -an | grep 端口号
  • 3.代码访问
public class RocketMqsendMessageTest {
    //发送消息
    public static void main(String[] args) throws Exception{
        //1.创建消息生产者,并设置生成组名
        DefaultMQProducer producer = new DefaultMQProducer("myproducer-group");
        //producer.setVipChannelEnabled(false);
        //2.为生产者设置NameServer的地址  192.168.31.35:要配置内网和那个nameServer
        producer.setNamesrvAddr("192.168.31.35:9876");
        //3.启动生产者
        producer.start();

        //4.构建消息对象,主要设置消息主题 标签 内容
        Message message = new Message("myTopic", "MyTag", ("Test RocketMq message").getBytes());
        //5.发送消息  第二个参数:代表超时时间
        SendResult result = producer.send(message, 10000);
        System.out.println(result);
        //6.关闭生产者
        producer.shutdown();
    }
}

在这里插入图片描述

  • 3消息的类型
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值