在springboot中使用nacos一定要注意name,使用openfeign特别要注意这个点。
spring:
application:
name: item-service
需要的依赖包
- config需要引入的包
<dependency>
<groupid>com.alibaba.cloud</groupid>
<artifactid>spring-cloud-starter-alibaba-nacos-config</artifactid>
</dependency>
- discovery需要引入的包
<dependency>
<groupid>com.alibaba.cloud</groupid>
<artifactid>spring-cloud-starter-alibaba-nacos-discovery</artifactid>
</dependency>
- bootstrap需要引入的包
<!--加载bootstrap-->
<dependency>
<groupid>org.springframework.cloud</groupid>
<artifactid>spring-cloud-starter-bootstrap</artifactid>
</dependency>
- 配置openfeign需要引入的包
<dependency>
<groupid>org.springframework.cloud</groupid>
<artifactid>spring-cloud-starter-openfeign</artifactid>
</dependency>
- openfeign负载均衡
<dependency>
<groupid>org.springframework.cloud</groupid>
<artifactid>spring-cloud-starter-loadbalancer</artifactid>
</dependency>
- openfeign连接池
<dependency>
<groupid>io.github.openfeign</groupid>
<artifactid>feign-okhttp</artifactid>
</dependency>
安装nacos
创建nacos数据库
-- --------------------------------------------------------
-- 主机: 192.168.150.101
-- 服务器版本: 8.0.27 - mysql community server - gpl
-- 服务器操作系统: linux
-- heidisql 版本: 12.2.0.6576
-- --------------------------------------------------------
/*!40101 set @old_character_set_client=@@character_set_client */;
/*!40101 set names utf8 */;
/*!50503 set names utf8mb4 */;
/*!40103 set @old_time_zone=@@time_zone */;
/*!40103 set time_zone='+00:00' */;
/*!40014 set @old_foreign_key_checks=@@foreign_key_checks, foreign_key_checks=0 */;
/*!40101 set @old_sql_mode=@@sql_mode, sql_mode='no_auto_value_on_zero' */;
/*!40111 set @old_sql_notes=@@sql_notes, sql_notes=0 */;
-- 导出 nacos 的数据库结构
drop database if exists `nacos`;
create database if not exists `nacos` /*!40100 default character set utf8mb4 collate utf8mb4_general_ci */ /*!80016 default encryption='n' */;
use `nacos`;
-- 导出 表 nacos.config_info 结构
drop table if exists `config_info`;
create table if not exists `config_info` (
`id` bigint not null auto_increment comment 'id',
`data_id` varchar(255) collate utf8_bin not null comment 'data_id',
`group_id` varchar(128) collate utf8_bin default null,
`content` longtext collate utf8_bin not null comment 'content',
`md5` varchar(32) collate utf8_bin default null comment 'md5',
`gmt_create` datetime not null default current_timestamp comment '创建时间',
`gmt_modified` datetime not null default current_timestamp comment '修改时间',
`src_user` text collate utf8_bin comment 'source user',
`src_ip` varchar(50) collate utf8_bin default null comment 'source ip',
`app_name` varchar(128) collate utf8_bin default null,
`tenant_id` varchar(128) collate utf8_bin default '' comment '租户字段',
`c_desc` varchar(256) collate utf8_bin default null,
`c_use` varchar(64) collate utf8_bin default null,
`effect` varchar(64) collate utf8_bin default null,
`type` varchar(64) collate utf8_bin default null,
`c_schema` text collate utf8_bin,
`encrypted_data_key` text collate utf8_bin not null comment '秘钥',
primary key (`id`),
unique key `uk_configinfo_datagrouptenant` (`data_id`,`group_id`,`tenant_id`)
) engine=innodb default charset=utf8mb3 collate=utf8_bin comment='config_info';
-- 正在导出表 nacos.config_info 的数据:~0 rows (大约)
delete from `config_info`;
-- 导出 表 nacos.config_info_aggr 结构
drop table if exists `config_info_aggr`;
create table if not exists `config_info_aggr` (
`id` bigint not null auto_increment comment 'id',
`data_id` varchar(255) collate utf8_bin not null comment 'data_id',
`group_id` varchar(128) collate utf8_bin not null comment 'group_id',
`datum_id` varchar(255) collate utf8_bin not null comment 'datum_id',
`content` longtext collate utf8_bin not null comment '内容',
`gmt_modified` datetime not null comment '修改时间',
`app_name` varchar(128) collate utf8_bin default null,
`tenant_id` varchar(128) collate utf8_bin default '' comment '租户字段',
primary key (`id`),
unique key `uk_configinfoaggr_datagrouptenantdatum` (`data_id`,`group_id`,`tenant_id`,`datum_id`)
) engine=innodb default charset=utf8mb3 collate=utf8_bin comment='增加租户字段';
-- 正在导出表 nacos.config_info_aggr 的数据:~0 rows (大约)
delete from `config_info_aggr`;
-- 导出 表 nacos.config_info_beta 结构
drop table if exists `config_info_beta`;
create table if not exists `config_info_beta` (
`id` bigint not null auto_increment comment 'id',
`data_id` varchar(255) collate utf8_bin not null comment 'data_id',
`group_id` varchar(128) collate utf8_bin not null comment 'group_id',
`app_name` varchar(128) collate utf8_bin default null comment 'app_name',
`content` longtext collate utf8_bin not null comment 'content',
`beta_ips` varchar(1024) collate utf8_bin default null comment 'betaips',
`md5` varchar(32) collate utf8_bin default null comment 'md5',
`gmt_create` datetime not null default current_timestamp comment '创建时间',
`gmt_modified` datetime not null default current_timestamp comment '修改时间',
`src_user` text collate utf8_bin comment 'source user',
`src_ip` varchar(50) collate utf8_bin default null comment 'source ip',
`tenant_id` varchar(128) collate utf8_bin default '' comment '租户字段',
`encrypted_data_key` text collate utf8_bin not null comment '秘钥',
primary key (`id`),
unique key `uk_configinfobeta_datagrouptenant` (`data_id`,`group_id`,`tenant_id`)
) engine=innodb default charset=utf8mb3 collate=utf8_bin comment='config_info_beta';
-- 正在导出表 nacos.config_info_beta 的数据:~0 rows (大约)
delete from `config_info_beta`;
-- 导出 表 nacos.config_info_tag 结构
drop table if exists `config_info_tag`;
create table if not exists `config_info_tag` (
`id` bigint not null auto_increment comment 'id',
`data_id` varchar(255) collate utf8_bin not null comment 'data_id',
`group_id` varchar(128) collate utf8_bin not null comment 'group_id',
`tenant_id` varchar(128) collate utf8_bin default '' comment 'tenant_id',
`tag_id` varchar(128) collate utf8_bin not null comment 'tag_id',
`app_name` varchar(128) collate utf8_bin default null comment 'app_name',
`content` longtext collate utf8_bin not null comment 'content',
`md5` varchar(32) collate utf8_bin default null comment 'md5',
`gmt_create` datetime not null default current_timestamp comment '创建时间',
`gmt_modified` datetime not null default current_timestamp comment '修改时间',
`src_user` text collate utf8_bin comment 'source user',
`src_ip` varchar(50) collate utf8_bin default null comment 'source ip',
primary key (`id`),
unique key `uk_configinfotag_datagrouptenanttag` (`data_id`,`group_id`,`tenant_id`,`tag_id`)
) engine=innodb default charset=utf8mb3 collate=utf8_bin comment='config_info_tag';
-- 正在导出表 nacos.config_info_tag 的数据:~0 rows (大约)
delete from `config_info_tag`;
-- 导出 表 nacos.config_tags_relation 结构
drop table if exists `config_tags_relation`;
create table if not exists `config_tags_relation` (
`id` bigint not null comment 'id',
`tag_name` varchar(128) collate utf8_bin not null comment 'tag_name',
`tag_type` varchar(64) collate utf8_bin default null comment 'tag_type',
`data_id` varchar(255) collate utf8_bin not null comment 'data_id',
`group_id` varchar(128) collate utf8_bin not null comment 'group_id',
`tenant_id` varchar(128) collate utf8_bin default '' comment 'tenant_id',
`nid` bigint not null auto_increment,
primary key (`nid`),
unique key `uk_configtagrelation_configidtag` (`id`,`tag_name`,`tag_type`),
key `idx_tenant_id` (`tenant_id`)
) engine=innodb default charset=utf8mb3 collate=utf8_bin comment='config_tag_relation';
-- 正在导出表 nacos.config_tags_relation 的数据:~0 rows (大约)
delete from `config_tags_relation`;
-- 导出 表 nacos.group_capacity 结构
drop table if exists `group_capacity`;
create table if not exists `group_capacity` (
`id` bigint unsigned not null auto_increment comment '主键id',
`group_id` varchar(128) collate utf8_bin not null default '' comment 'group id,空字符表示整个集群',
`quota` int unsigned not null default '0' comment '配额,0表示使用默认值',
`usage` int unsigned not null default '0' comment '使用量',
`max_size` int unsigned not null default '0' comment '单个配置大小上限,单位为字节,0表示使用默认值',
`max_aggr_count` int unsigned not null default '0' comment '聚合子配置最大个数,,0表示使用默认值',
`max_aggr_size` int unsigned not null default '0' comment '单个聚合数据的子配置大小上限,单位为字节,0表示使用默认值',
`max_history_count` int unsigned not null default '0' comment '最大变更历史数量',
`gmt_create` datetime not null default current_timestamp comment '创建时间',
`gmt_modified` datetime not null default current_timestamp comment '修改时间',
primary key (`id`),
unique key `uk_group_id` (`group_id`)
) engine=innodb default charset=utf8mb3 collate=utf8_bin comment='集群、各group容量信息表';
-- 正在导出表 nacos.group_capacity 的数据:~0 rows (大约)
delete from `group_capacity`;
-- 导出 表 nacos.his_config_info 结构
drop table if exists `his_config_info`;
create table if not exists `his_config_info` (
`id` bigint unsigned not null,
`nid` bigint unsigned not null auto_increment,
`data_id` varchar(255) collate utf8_bin not null,
`group_id` varchar(128) collate utf8_bin not null,
`app_name` varchar(128) collate utf8_bin default null comment 'app_name',
`content` longtext collate utf8_bin not null,
`md5` varchar(32) collate utf8_bin default null,
`gmt_create` datetime not null default current_timestamp,
`gmt_modified` datetime not null default current_timestamp,
`src_user` text collate utf8_bin,
`src_ip` varchar(50) collate utf8_bin default null,
`op_type` char(10) collate utf8_bin default null,
`tenant_id` varchar(128) collate utf8_bin default '' comment '租户字段',
`encrypted_data_key` text collate utf8_bin not null comment '秘钥',
primary key (`nid`),
key `idx_gmt_create` (`gmt_create`),
key `idx_gmt_modified` (`gmt_modified`),
key `idx_did` (`data_id`)
) engine=innodb default charset=utf8mb3 collate=utf8_bin comment='多租户改造';
-- 正在导出表 nacos.his_config_info 的数据:~0 rows (大约)
delete from `his_config_info`;
-- 导出 表 nacos.permissions 结构
drop table if exists `permissions`;
create table if not exists `permissions` (
`role` varchar(50) collate utf8mb4_general_ci not null,
`resource` varchar(255) collate utf8mb4_general_ci not null,
`action` varchar(8) collate utf8mb4_general_ci not null,
unique key `uk_role_permission` (`role`,`resource`,`action`) using btree
) engine=innodb default charset=utf8mb4 collate=utf8mb4_general_ci;
-- 正在导出表 nacos.permissions 的数据:~0 rows (大约)
delete from `permissions`;
-- 导出 表 nacos.roles 结构
drop table if exists `roles`;
create table if not exists `roles` (
`username` varchar(50) collate utf8mb4_general_ci not null,
`role` varchar(50) collate utf8mb4_general_ci not null,
unique key `idx_user_role` (`username`,`role`) using btree
) engine=innodb default charset=utf8mb4 collate=utf8mb4_general_ci;
-- 正在导出表 nacos.roles 的数据:~1 rows (大约)
delete from `roles`;
insert into `roles` (`username`, `role`) values
('nacos', 'role_admin');
-- 导出 表 nacos.tenant_capacity 结构
drop table if exists `tenant_capacity`;
create table if not exists `tenant_capacity` (
`id` bigint unsigned not null auto_increment comment '主键id',
`tenant_id` varchar(128) collate utf8_bin not null default '' comment 'tenant id',
`quota` int unsigned not null default '0' comment '配额,0表示使用默认值',
`usage` int unsigned not null default '0' comment '使用量',
`max_size` int unsigned not null default '0' comment '单个配置大小上限,单位为字节,0表示使用默认值',
`max_aggr_count` int unsigned not null default '0' comment '聚合子配置最大个数',
`max_aggr_size` int unsigned not null default '0' comment '单个聚合数据的子配置大小上限,单位为字节,0表示使用默认值',
`max_history_count` int unsigned not null default '0' comment '最大变更历史数量',
`gmt_create` datetime not null default current_timestamp comment '创建时间',
`gmt_modified` datetime not null default current_timestamp comment '修改时间',
primary key (`id`),
unique key `uk_tenant_id` (`tenant_id`)
) engine=innodb default charset=utf8mb3 collate=utf8_bin comment='租户容量信息表';
-- 正在导出表 nacos.tenant_capacity 的数据:~0 rows (大约)
delete from `tenant_capacity`;
-- 导出 表 nacos.tenant_info 结构
drop table if exists `tenant_info`;
create table if not exists `tenant_info` (
`id` bigint not null auto_increment comment 'id',
`kp` varchar(128) collate utf8_bin not null comment 'kp',
`tenant_id` varchar(128) collate utf8_bin default '' comment 'tenant_id',
`tenant_name` varchar(128) collate utf8_bin default '' comment 'tenant_name',
`tenant_desc` varchar(256) collate utf8_bin default null comment 'tenant_desc',
`create_source` varchar(32) collate utf8_bin default null comment 'create_source',
`gmt_create` bigint not null comment '创建时间',
`gmt_modified` bigint not null comment '修改时间',
primary key (`id`),
unique key `uk_tenant_info_kptenantid` (`kp`,`tenant_id`),
key `idx_tenant_id` (`tenant_id`)
) engine=innodb default charset=utf8mb3 collate=utf8_bin comment='tenant_info';
-- 正在导出表 nacos.tenant_info 的数据:~0 rows (大约)
delete from `tenant_info`;
-- 导出 表 nacos.users 结构
drop table if exists `users`;
create table if not exists `users` (
`username` varchar(50) collate utf8mb4_general_ci not null,
`password` varchar(500) collate utf8mb4_general_ci not null,
`enabled` tinyint(1) not null,
primary key (`username`)
) engine=innodb default charset=utf8mb4 collate=utf8mb4_general_ci;
-- 正在导出表 nacos.users 的数据:~1 rows (大约)
delete from `users`;
insert into `users` (`username`, `password`, `enabled`) values
('nacos', '$2a$10$euwpzhzz32djn7jexm34moeyirddfazm2kuwj7veojhhzkdrxfvuu', 1);
/*!40103 set time_zone=ifnull(@old_time_zone, 'system') */;
/*!40101 set sql_mode=ifnull(@old_sql_mode, '') */;
/*!40014 set foreign_key_checks=ifnull(@old_foreign_key_checks, 1) */;
/*!40101 set character_set_client=@old_character_set_client */;
/*!40111 set sql_notes=ifnull(@old_sql_notes, 1) */;
env文件
prefer_host_mode=hostname mode=standalone nacos_auth_enable=true spring_datasource_platform=mysql mysql_service_host=127.0.0.1 mysql_service_db_name=nacos mysql_service_port=3306 mysql_service_user=root mysql_service_password="02120212" mysql_service_db_param=characterencoding=utf8&connecttimeout=1000&sockettimeout=3000&autoreconnect=true&usessl=false&allowpublickeyretrieval=true&servertimezone=asia/shanghai
启动命令
docker run -d \ --name nacos \ --env-file ./env \ -p 8848:8848 \ -p 9848:9848 \ -p 9849:9849 \ --restart=always \ nacos/nacos-server:v2.1.0-slim
调用微服务三种方式
第一种
- 使用http请求
在启动类中使用bean注入
@mapperscan("com.heima.cart.mapper")
@springbootapplication
public class cartapplication {
public static void main(string[] args) {
springapplication.run(cartapplication.class, args);
}
@bean
public resttemplate resttemplate() {
return new resttemplate();
}
}
实现类中注入resttemplate ,注意加上@requiredargsconstructor
@service
@requiredargsconstructor
public class cartserviceimpl extends serviceimpl<cartmapper, cart> implements icartservice {
private final resttemplate resttemplate;
}
使用调用发送请求
private void handlecartitems(list<cartvo> vos) {
// 1.获取商品id
set<long> itemids = vos.stream().map(cartvo::getitemid).collect(collectors.toset());
// 2.查询商品
responseentity<list<itemdto>> response = resttemplate.exchange("http://localhost:8081/items?ids={ids}",
httpmethod.get, null, new parameterizedtypereference<>() {
},
map.of("ids", stringutils.join(itemids, ",")));
list<itemdto> items = response.getbody();
// ...
}
第二种
- 使用负载均衡方式引入
引入nacos discovery依赖
<!--统一配置管理-->
<dependency>
<groupid>com.alibaba.cloud</groupid>
<artifactid>spring-cloud-starter-alibaba-nacos-config</artifactid>
</dependency>
<dependency>
<groupid>com.alibaba.cloud</groupid>
<artifactid>spring-cloud-starter-alibaba-nacos-discovery</artifactid>
</dependency>
<!--加载bootstrap-->
<dependency>
<groupid>org.springframework.cloud</groupid>
<artifactid>spring-cloud-starter-bootstrap</artifactid>
</dependency>
将配置文件改为bootstrap,配置nacos地址
spring:
cloud:
nacos:
discovery:
server-addr:http://192.168.3.98/:8848
namespace: hmall
group: hmall-bunny
config:
server-addr: http://192.168.3.98/:8848
namespace: hmall
file-extension: yml
如果在
discovery中加入了group,此时被调用的服务也要有group而且要和当前的group一致。
加入负载均衡
@service
@requiredargsconstructor
public class cartserviceimpl extends serviceimpl<cartmapper, cart> implements icartservice {
private final discoveryclient discoveryclient;
// 1.获取商品id
set<long> itemids = vos.stream().map(cartvo::getitemid).collect(collectors.toset());
// 2.查询商品,使用负载均衡
list<serviceinstance> instances = discoveryclient.getinstances("item-service");
serviceinstance instance = instances.get(randomutil.randomint(instances.size()));
// 将原始的地址改为:instance.geturi()
responseentity<list<itemdto>> response = resttemplate.exchange(instance.geturi() + "/items?ids={ids}",
httpmethod.get, null, new parameterizedtypereference<>() {
},
map.of("ids", stringutils.join(itemids, ",")));
list<itemdto> items = response.getbody();
list<itemdto> items = itemclient.queryitemsbyids(itemids);
}
第三种
- 使用openfeign
引入依赖
<!-- openfeign相关 -->
<dependency>
<groupid>org.springframework.cloud</groupid>
<artifactid>spring-cloud-starter-openfeign</artifactid>
</dependency>
<dependency>
<groupid>org.springframework.cloud</groupid>
<artifactid>spring-cloud-starter-loadbalancer</artifactid>
</dependency>
<dependency>
<groupid>io.github.openfeign</groupid>
<artifactid>feign-okhttp</artifactid>
</dependency>
在启动类上加上注解@enablefeignclients
@mapperscan("com.heima.cart.mapper")
@springbootapplication
@enablefeignclients
public class cartapplication {
public static void main(string[] args) {
springapplication.run(cartapplication.class, args);
}
}
编写feignclient,其中item-service是指配置文件中name名字,一定要保持一致
@feignclient(value = "item-service")
public interface itemclient {
@getmapping("/items")
list<itemdto> queryitemsbyids(@requestparam("ids") collection<long> ids);
}
之后和正常调用接口即可
private void handlecartitems(list<cartvo> vos) {
// 1.获取商品id
set<long> itemids = vos.stream().map(cartvo::getitemid).collect(collectors.toset());
// 2.查询商品
list<itemdto> items = itemclient.queryitemsbyids(itemids);
// ...
}
nacos 共享配置
如果在nacos中有部分配置是相同的,可以设置为共享配置。
需要注意的是,如果在共享配置中制定了namespace、group那么在配置文件中也要有这些内容。
并且共享配置要在springboot配置文件config下配置
特别要注意!!!如果data id名称为my-common那么在shared-configs中为- data-id: my-common,要与名称一样,不要加.yaml
如果data id有.yml那么在配置文件中就要有.yml名称必须要一至。
cloud:
nacos:
discovery:
server-addr: 192.168.3.10:8848
namespace: hmall
config:
server-addr: 192.168.3.10:8848
namespace: hmall
file-extension: yml
shared-configs:
- data-id: hmall-common.yml
refresh: true
分配置是相同的,可以设置为共享配置。
需要注意的是,如果在共享配置中制定了namespace、group那么在配置文件中也要有这些内容。
并且共享配置要在springboot配置文件config下配置
特别要注意!!!如果data id名称为my-common那么在shared-configs中为- data-id: my-common,要与名称一样,不要加.yaml
如果data id有.yml那么在配置文件中就要有.yml名称必须要一至。
cloud:
nacos:
discovery:
server-addr: 192.168.3.10:8848
namespace: hmall
config:
server-addr: 192.168.3.10:8848
namespace: hmall
file-extension: yml
shared-configs:
- data-id: hmall-common.yml
refresh: true

到此这篇关于springboot中配置nacos的方法实现的文章就介绍到这了,更多相关springboot配置nacos内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论