IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> Springcloud、Springmvc+Nacos注册中心实现服务注册 -> 正文阅读

[Java知识库]Springcloud、Springmvc+Nacos注册中心实现服务注册

目录

背景

实现

Nacos环境搭建

Springcloud服务注册

Maven配置

代码实现

Springmvc服务注册

Maven依赖

代码实现?


背景

不管是springcloud还是springmvc实现服务的自动注册,都是在项目启动完成bean初始化时,调用nacos服务的API,实现的自动注册。

实现

Nacos环境搭建

官网:什么是 Nacos

SpringCloud集成文档:Nacos Spring Cloud 快速开始?

Spring集成文档:Nacos Spring 快速开始

参考之前写的博文:Springcloud+Druid+Mybatis+Seata+Nacos动态切换多数据源,分布式事务的实现

使用的nacos版本1.4.1?

Springcloud服务注册

Maven配置

用到了nacosdiscovery和lombok

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <optional>true</optional>
</dependency>

?代码实现

package com.luck.config;

import org.springframework.beans.factory.SmartInitializingSingleton;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.cloud.commons.util.InetUtils;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationListener;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.event.ContextClosedEvent;
import org.springframework.stereotype.Component;

import com.alibaba.cloud.nacos.NacosDiscoveryProperties;
import com.alibaba.cloud.nacos.registry.NacosRegistration;
import com.alibaba.cloud.nacos.registry.NacosServiceRegistry;

import lombok.Data;

@Configuration
public class NacosDiscoveryConfig implements SmartInitializingSingleton, ApplicationListener<ContextClosedEvent> {

	@Value("${spring.cloud.nacos.discovery.namespace}")
	String namespace;

	@Value("${spring.cloud.nacos.discovery.server-addr}")
	String serverAddr;

	@Data
	@Component
	@ConfigurationProperties("luck.nacos.server")
	class NacosServerProperties {

		/** 服务IP地址 */
		private String ip = "0.0.0.0";
		/** 服务端口号 */
		private Integer port = 8080;
		/** 服务名称 */
		private String serviceName = "cloud-luckserver";

		@Autowired
		InetUtils inetUtils;

		public void setIp(String ip) {
			if (ip != null)
				this.ip = ip.trim();
		}

		public String getFirstIp() {
			if ("0.0.0.0".equals(ip))
				return inetUtils.findFirstNonLoopbackAddress().getHostAddress();
			return ip;
		}
	}

	@Autowired
	NacosServerProperties nacosServerProperties;

	/** 服务注册 */
	@Autowired
	NacosServiceRegistry nacosServiceRegistry;

	@Autowired
	ApplicationContext context;

	NacosRegistration registration;

	@Override
	public void afterSingletonsInstantiated() {

		NacosDiscoveryProperties properties = new NacosDiscoveryProperties();
		properties.setNamespace(namespace);
		properties.setPort(nacosServerProperties.getPort());
		properties.setIp(nacosServerProperties.getFirstIp());
		properties.setServerAddr(serverAddr);
		properties.setService(nacosServerProperties.getServiceName());

		registration = new NacosRegistration(properties, context);

		registration.setPort(nacosServerProperties.getPort());
		nacosServiceRegistry.register(registration);

	}

	@Override
	public void onApplicationEvent(ContextClosedEvent contextClosedEvent) {
		nacosServiceRegistry.deregister(registration);
	}
}

Springmvc服务注册

Maven依赖

用到了nacos-spring-context和hutool

<dependency>
    <groupId>com.alibaba.nacos</groupId>
    <artifactId>nacos-spring-context</artifactId>
    <version>1.1.1</version>
</dependency>
<dependency>
    <groupId>cn.hutool</groupId>
    <artifactId>hutool-all</artifactId>
    <version>4.1.19</version>
</dependency>

代码实现?

package com.luck.config.nacos;

import java.util.Properties;

import org.springframework.beans.factory.SmartInitializingSingleton;
import org.springframework.context.ApplicationListener;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.event.ContextClosedEvent;

import com.alibaba.nacos.api.exception.NacosException;
import com.alibaba.nacos.api.naming.NamingFactory;
import com.alibaba.nacos.api.naming.NamingService;
import com.luck.utils.Constant;

import cn.hutool.core.util.NetUtil;

@Configuration
public class NacosDiscoveryConfig implements SmartInitializingSingleton, ApplicationListener<ContextClosedEvent> {

	private String namespace = Constant.getProperty("nacos.naming.namespace", "default");
	private String serverAddr = Constant.getProperty("nacos.naming.server-addr", null);
	private String group = Constant.getProperty("nacos.naming.group", "DEFAULT");
	private String ip = NetUtil.getLocalhostStr();
	private Integer port = Integer.parseInt(Constant.getProperty("server.port", "8080"));
	private String serviceName = Constant.getProperty("nacos.server.name", "cloud-luckserver");

	/** 服务注册 */
	private NamingService namingService;

	@Override
	public void afterSingletonsInstantiated() {
		if (null != namingService || null == serverAddr) {
			return;
		}

		Properties properties = new Properties();
		properties.setProperty("serverAddr", serverAddr);
		properties.setProperty("namespace", namespace);

		try {
			namingService = NamingFactory.createNamingService(properties);
			namingService.registerInstance(serviceName, ip, port, group);
		} catch (NacosException e) {
			e.printStackTrace();
		}

	}

	@Override
	public void onApplicationEvent(ContextClosedEvent contextClosedEvent) {
		if (null == namingService) {
			return;
		}
		try {
			namingService.deregisterInstance(serviceName, ip, port, group);
		} catch (NacosException e) {
			e.printStackTrace();
		}
	}
}

需要注意这个配置类要可以被spring扫描到,如在xml添加

<context:component-scan base-package="com.luck.config.nacos" />

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-07-21 21:22:54  更:2022-07-21 21:22:56 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/18 5:39:57-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码