首页
随记分享
代码编程
人工智能
业界评论
职业工作
搜索
1
MySQL常用命令
1,444 阅读
2
RocketMQ 消息中间件安装、JAVA集成、运行、维护管理
148 阅读
3
什么是微服务?何时用?如何用?如何搭建微服务架构?
147 阅读
4
nacos动态服务注册发现中心、服务配置管理中心
133 阅读
5
ChatGPT,生成式人工智能,从机器学习到智能创造!
106 阅读
随记分享
代码编程
人工智能
业界评论
职业工作
登录
搜索
标签搜索
微服务
人工智能
MySQL
nacos
deepseek
Aryee
累计撰写
7
篇文章
累计收到
0
条评论
首页
栏目
随记分享
代码编程
人工智能
业界评论
职业工作
页面
搜索到
4
篇
分类为
代码编程
的文章
2023-11-12
RocketMQ 消息中间件安装、JAVA集成、运行、维护管理
RocketMQ概述RocketMQ是一个开源的分布式消息中间件系统,最初由阿里巴巴集团开发并开源。它提供了可靠的消息传递和高效的消息订阅机制,可以支持大规模的消息通信。RocketMQ具有高可靠性、高吞吐量、低延迟和高扩展性的特点,适用于大规模分布式系统中的消息通信需求。它支持多种消息传递模式,包括点对点和发布/订阅模式,同时还提供了丰富的消息过滤和路由功能。RocketMQ采用了分布式架构设计,可以实现水平扩展和高可用性的部署。它支持多种消息存储方式,包括内存存储和磁盘存储,并提供了可靠的消息传递保证,确保消息不会丢失或重复。RocketMQ还提供了丰富的监控和管理功能,可以实时监控消息的生产和消费情况,以及集群的运行状态。同时,它还提供了灵活的消息顺序控制和事务消息支持,满足了不同场景下的消息通信需求。RocketMQ支持事务消息、顺序消息、批量消息、定时消息、消息回溯等。它里面有几个区别于标准消息中件间的概念,如Group、Topic、Queue等。系统组成则由Producer、Consumer、Broker、NameServer等。Name Server: 名称服务充当路由消息的提供者。是一个几乎无状态节点,可集群部署,节点之间无任何信息同步。在消息队列 RocketMQ 中提供命名服务,更新和发现 Broker 服务。Broker:消息中转角色,负责存储消息,转发消息。可以理解为消息队列服务器,提供了消息的接收、存储、拉取和转发服务。生产者Producer:与 Name Server 集群中的其中一个节点(随机)建立长链接(Keep-alive),定期从 Name Server 读取 Topic 路由信息,并向提供 Topic 服务的 Master Broker 建立长链接,且定时向 Master Broker 发送心跳。消费者Consumer:与 Name Server 集群中的其中一个节点(随机)建立长连接,定期从 Name Server 拉取 Topic 路由信息,并向提供 Topic 服务的 Master Broker、Slave Broker 建立长连接,且定时向 Master Broker、Slave Broker 发送心跳。Consumer 既可以从 Master Broker 订阅消息,也可以从 Slave Broker 订阅消息,订阅规则由 Broker 配置决定。RocketMQ下载:RocketMQ地址:https://rocketmq.apache.org/zh/download一、RocketMQ启动1. 创建一个logs文件夹,用于存放日志(切换到rocketmq目录)2. 启动NameServernohup sh bin/mqnamesrv > ./logs/namesrv.log &3. 启动brokernohup sh bin/mqbroker > ./logs/broker.log & #这里的 -c 是指定使用的配置文件 nohup sh bin/mqbroker -c conf/broker.conf > ./logs/broker.log &二、RocketMQ关闭#切换到bin目录下 #关闭broker ./mqshutdown broker #关闭nameserver ./mqshutdown namesrv三、java SpringBoot整合1. 导入依赖配置<!-- rocketmq --> <dependency> <groupId>org.apache.rocketmq</groupId> <artifactId>rocketmq-spring-boot-starter</artifactId> <version>${rocketmq.version}</version> </dependency>2. ymlrocketmq: name-server: ip或域名:9876 producer: group: aryee-message-group3. 生产者,注意:微服务项目场景封装代码,只作参考,复制无用@Api(tags = "消息生产者") @RestController @RequestMapping("/mq") public class ProducerController extends MessageBaseController { @Autowired private ProducerService producerService; @ApiOperation("普通消息") @InnerAuth @PostMapping("/{topic}") public String convertAndSend(@PathVariable("topic") String topic, @RequestBody JSONObject jsonObject) { //String topic = "aryee-message-topic"; producerService.convertAndSend(topic, jsonObject); return "success"; } //其它方法封装类似,这里省略大部分代码 }4. 消费者,注意:微服务项目场景封装代码,只作参考,复制无用@Component public class WxConsumerListener { @Component @RocketMQMessageListener(topic = "wx-cp-app-msg-topic", consumerGroup = "wx-cp-app-msg") public static class CpAppConsumerListener implements RocketMQListener<MessageExt> { @Autowired private WxCpAppService wxCpAppService; @Autowired private WxQyUserService userService; @Override public void onMessage(MessageExt m) { // System.out.printf("收到消息,topic:%s, tag:%s, msgId:%s", m.getTopic(), m.getTags(), m.getMsgId()); Map<String, String> map = JSONObject.parseObject(m.getBody(), Map.class); WxCpMessage message = JSONObject.parseObject(m.getBody(), WxCpMessage.class); if (StringUtils.isNotEmpty(map.get("phone"))) { LambdaQueryWrapper<WxQyUser> query = new LambdaQueryWrapper<>(); query.eq(WxQyUser::getMobile, map.get("phone")); WxQyUser user = userService.getOne(query); if (StringUtils.isNotNull(user)) message.setToUser(user.getUserId()); } if (StringUtils.isEmpty(message.getToParty()) && StringUtils.isEmpty(message.getToUser())) { message.setToParty("14"); } if (StringUtils.isNotEmpty(map.get("chatId"))) { WxCpAppChatMessage msg = JSONObject.parseObject(m.getBody(), WxCpAppChatMessage.class); wxCpAppService.sendGroupMsg(msg); } else { R<String> result = wxCpAppService.sendAppMsg(message); System.out.println(result); } } } }三、配置rocketmq-dashboard1. github下载git:https://github.com/apache/rocketmq-dashboard.gitdownload:https://codeload.github.com/apache/rocketmq-dashboard/zip/refs/heads/master2. IDE编译jar包上传到服务器指定NameServer的地址和启动端口(8090)以及输出日志nohup java -jar rocketmq-dashboard-1.0.0.jar & //指定NameServer地址、启动端口、输出日志 nohup java -jar rocketmq-dashboard-1.0.0.jar --server.port=8000 --rocketmq.config.namesrvAddr=127.0.0.1:9876 > ./rocketmq-all-4.9.0-bin-release/logs/dashboard.log &
2023年11月12日
148 阅读
0 评论
15 点赞
2023-03-31
nacos动态服务注册发现中心、服务配置管理中心
Nacos(DynamicNaming and Configuration Service)是一个应用于服务注册与发现、配置管理的平台。它孵化于阿里巴巴,成长于十年双十一的洪峰考验,沉淀了简单易用、稳定可靠、性能卓越的核心竞争力。 了解:NACOS架构&原理 官网:NACOS官网 一、nacos地图二、nacos环境准备Nacos 依赖 Java 环境来运行。如果您是从代码开始构建并运行Nacos,还需要为此配置 Maven环境,请确保是在以下版本环境中安装使用:64 bit OS,支持 Linux/Unix/Mac/Windows,推荐选用 Linux/Unix/Mac64 bit JDK 1.8+;下载Maven 3.2.x+;下载 & 配置MySQL 5.7.x+;三、nacos下载github下载四、配置 MySQL 数据库初始化 MySQL 数据库,在 nacos-server 解压目录 conf 下,找到 nacos-mysql.sql 文件,在数据库中导入该文件application.properties 配置,编辑内容#*************** Config Module Related Configurations ***************# ### If user MySQL as datasource: # 指定数据源为 MySQL spring.datasource.platform=mysql ### Count of DB: # 数据库实例数量 db.num=1 # 数据库连接信息,如果是 MySQL 8.0+ 版本需要添加 serverTimezone=Asia/Shanghai ### Connect URL of DB: db.url.0=jdbc:mysql://127.0.0.1:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&serverTimezone=Asia/Shanghai db.user.0=root db.password.0=123456如果使用的是 MySQL 8.0+ 版本,Nacos启动时会报错。需要在 Nacos 安装目录下新建 plugins/mysql 文件夹,并放入 8.0+ 版本的 mysql-connector-java-8.0.xx.jar。 下载@版本 五、nacos启动服务Linux/Unix/Mac,启动命令(standalone代表着单机模式运行,非集群模式):sh startup.sh -m standalone#如果您使用的是ubuntu系统,或者运行脚本报错提示符号找不到,可尝试如下运行: bash startup.sh -m standaloneWindows,启动命令(standalone代表着单机模式运行,非集群模式):startup.cmd -m standalone默认访问地址端口http://127.0.0.1:8848/nacos/六、nacos停止服务Linux/Unix/Macsh shutdown.shWindowsshutdown.cmd
2023年03月31日
133 阅读
0 评论
9 点赞
2023-03-09
MySQL常用命令
MySQL是一个关系型数据库管理系统,属于 Oracle 旗下产品,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性,MySQL所使用的 SQL 语言是用于访问数据库的最常用标准化语言,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型和大型网站的开发都选择 MySQL 作为网站数据库。官网: MySQL导出数据库,命令:mysqldump -u 用户名 -p 数据库名 > 导出的文件名mysqldump -u root -p db_name > db_name.sql导出所有数据库mysqldump -u root -p –all-databases > all.sql导出一个表,命令:mysqldump -u 用户名 -p 数据库名 表名> 导出的文件名mysqldump -u root -p db_name table_name > table_name.sql导出一个数据库结构mysqldump -u root -p -d --add-drop-table db_name > db_name.sql导入数据库mysqldump -u user_name -p db_name < db_name.sql使用mysql命令mysql -u user_name -p -D db_name < db_name.sql连接MySQL数据库服务器,用户名user_name,密码pwdmysql -u user_name -p pwd添加用户insert into mysql.user(Host,User,Password) values("localhost","user_name",password("pwd")); flush privileges;删除用户delete from user where user = 'user_name' and host='localhost'; flush privileges;查看当前用户select user();数据库授权#授权用户拥有库的所有权限 grant all on db_name.* to user_name@localhost identified by 'pwd'; #授权用户拥有库的select,update权限 grant select,update on db_name.* to user_name@localhost;显示所有数据库show databases;选择要使用的数据库,数据库名use database_name;显示所有表show tables;显示表结构,表名称table_namedesc table_name;插入数据insert into table_name(column1, column2, column3, ...) values(value1, value2, value3, ...);查询数据select * from table_name;更新数据update table_name set column_name = new_value where column_name = column_value;删除数据delete from table_name where column_name = cloumn_value;查看当前使用的数据库select database();当前数据库包含的表信息show tables;查看数据库字符集show variables like '%char%';建表create table table_name(id varchar(20),name varchar(20));查看表结构desc table_name;锁表、解锁flush tables with read lock; unlock tables;删除表drop table table_name;插入数据insert into table_name values("1","value");查询表中的数据select * from table_name; select * from table_name where id = 1; select * from table_name where id like "1%"; select * from table_name order by id limit 0,2; select * from table_name limit 0,2;删除表中数据delete from table_name where id=1;更新表中数据update table_name set cloumn_name = 'value' where id=2;修改表中字段的长度alter table talbe_name modify column column_name varchar(30);在表中增加字段alter table table_name add cloumn_name int(11) default '0';更改表名:rename table old_table_name to new_table_name;对表进行排序select * from table_name order by column_name asc; select * from table_name order by column_name desc;模糊查询select * from table_name where column_name LIKE '%search_keyword%';常见的连表查询select * from table1 join table2 on table1.column_name = table2.column_name; select * from table1 left join table2 on table1.column_name = table2.column_name; select * from table1 right join table2 on table1.column_name = table2.column_name;聚合函数 select COUNT(*) from table_name; select SUM(column_name) from table_name; select AVG(column_name) from table_name; select MAX(column_name) from table_name; select MIN(column_name) from table_name;分组select column_name, COUNT(*) from table_name group by column_name;创建索引create index index_name on table_name(column_name);删除索引drop index index_name on table_name;使用limit 进行分页select * from table_name limit start, count;显示服务器状态信息show status;查看Mysql提供存储引擎show engines;查看mysql默认存储引擎show variables like '%storage_engine%';查看mysql系统版本select version();查看mysql库里所有表show tables from mysql;查看Mysql端口show variables like 'port';查看mysql库user表中user,host信息select user,host from mysql.user;修改密码mysqladmin -uroot -p old_pwd password new_pwd use mysql; update mysql.user set password = 'nwe_pwd' where user = 'user_name'; flush privileges; set password for user_name@localhost=password('pwd'); flush privileges;MYSQL忘记密码方法,先停止Mysql服务,以跳过权限方式启动service mysqld stop /usr/local/mysql/bin/mysqld_safe –user=mysql –skip-grant-tables & #在shell终端输入mysql并按Enter键,进入mysql命令行,由于MYSQL用户及密码认证信息存放在mysql库中的user表,需进入mysql库 mysql; use mysql; update user set password=password('pwd') where user='user_name'; flush privileges;
2023年03月09日
1,444 阅读
0 评论
138 点赞
2023-03-09
什么是微服务?何时用?如何用?如何搭建微服务架构?
微服务是一种架构风格,将单个应用程序拆分为多个小型服务来运行。每个微服务都有自己独立的进程和数据库,并采用轻量级通信机制来与其他微服务通信。微服务架构可以提高弹性、可扩展性和可维护性,适用于大型、复杂的应用程序。何时使用微服务架构取决于应用程序的规模和复杂度。通常,当应用程序变得越来越复杂,单体架构的维护和扩展就变得越来越困难,这时可以考虑使用微服务架构。如何使用微服务架构需要考虑许多因素,例如微服务的定义、设计、创建、部署、测试和维护。微服务架构需要重视服务边界的划分、服务自治性、服务注册与发现、服务容错和异步通信等方面的实现。同时,对于大型的微服务应用程序,需要引入分布式跟踪和监控工具来保证应用的可观测性和调试的可追踪性。如何搭建微服务架构?要搭建微服务架构,需要考虑以下步骤:定义微服务架构 :首先需要在组织或企业内定义微服务架构。这包括确定架构的组成部分,如服务网关、服务注册表、配置服务器等。选择技术栈 :您需要选择一组技术,以构建这些微服务组件。这可能包括Java、Node.js、Python、Kotlin等。设计API :为每个微服务设计API,并确定需要实现的功能。构建和部署微服务 :使用选择的技术栈构建和部署每个微服务。实现微服务之间的通信 :微服务需要相互通信以实现其功能。您可以使用REST API、消息队列、RPC等机制来实现微服务之间的通信。监控微服务 :需要在应用程序中集成监测解决方案来监控微服务的性能和可用性。自动化 :考虑将构建、部署、测试、监控等过程自动化,以减少手动干预并提高效率。总之,搭建微服务架构需要细心计划和严格的执行,才能确保可扩展性和高可用性。
2023年03月09日
147 阅读
0 评论
-10 点赞