SpringCloud项目实例3--Nacos整合

news2024/12/23 9:32:42

然后新建一个Module,命名为nacos-provider-demo,Java代码的包名为ltd.newbee.cloud。在该Module的pom.xml配置文件中增加parent标签,与上层Maven建立好关系。之后,在这个子模块的 pom.xml 文件中加入Nacos的依赖项 spring-cloud-starter-alibaba-nacos-discovery。最终,子节点nacos-provider-demo的pom.xml如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>ltd.newbee.cloud</groupId>
    <artifactId>nacos-provider-demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>nacos-provider-demo</name>
    <description>Spring Cloud Alibaba Provider Demo</description>

    <parent>
        <groupId>ltd.newbee.cloud</groupId>
        <artifactId>spring-cloud-alibaba-nacos-demo</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>

    <properties>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <dependency>
          <groupId>com.alibaba.cloud</groupId>
          <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
                
    </dependencies>
</project>

首先把该Spring Boot项目的端口号设置为8091。之后创建ltd.newbee.cloud.api包,在api包中新建NewBeeCloudGoodsAPI类,代码如下:

package ltd.newbee.cloud.api;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class NewBeeCloudGoodsAPI {

    @Value("${server.port}")
    private String applicationServerPort;// 读取当前应用的启动端口

    @GetMapping("/goodsServiceTest")
    public String goodsServiceTest() {
        // 返回信息给调用端
        return "this is goodsService from port:" + applicationServerPort;
    }
}

启动类命名为ProviderApplication,代码如下:

package ltd.newbee.cloud;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class ProviderApplication {

    public static void main(String[] args) {
        SpringApplication.run(ProviderApplication.class, args);
    }

}

配置文件中添加Nacos配置参数

完成基础的服务编码后,接下来就要把这个服务注册到Nacos中去。过程也非常简单,只需要在application.properties文件中添加几个Nacos的配置项即可。

# 项目启动端口
server.port=8091
# 应用名称
spring.application.name=newbee-cloud-goods-service
# 注册中心Nacos的访问地址
spring.cloud.nacos.discovery.server-addr=localhost:8848
# 登录名(默认username,可自行修改)
spring.cloud.nacos.username=nacos
# 密码(默认password,可自行修改)
spring.cloud.nacos.password=nacos

在这里插入图片描述

编写服务消费端的代码

新建一个Module,命名为nacos-consumer-demo,Java代码的包名为ltd.newbee.cloud。在该Module的pom.xml配置文件中增加parent标签,与上层Maven建立好关系。之后,在这个子模块的 pom.xml 文件中加入Nacos的依赖项 spring-cloud-starter-alibaba-nacos-discovery。最终,子节点nacos-consumer-demo的pom.xml如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>ltd.newbee.cloud</groupId>
    <artifactId>nacos-consumer-demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>nacos-consumer-demo</name>
    <description>Spring Cloud Alibaba Nacos Consumer Demo</description>

    <parent>
        <groupId>ltd.newbee.cloud</groupId>
        <artifactId>spring-cloud-alibaba-nacos-demo</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>

    <properties>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
    </dependencies>
</project>

接着在nacos-consumer-demo中进行简单的功能编码,首先把该Spring Boot项目的端口号设置为8093。之后创建ltd.newbee.cloud.api包,在api包中新建ConsumerTestController类,代码如下:

package ltd.newbee.cloud.api;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;

@RestController
public class ConsumerTestController {

    // 测试方法,暂未通过Nacos调用下级服务
    @GetMapping("/nacosRegTest")
    public String nacosRegTest() {
        return "nacosRegTest";
    }
}

启动类命名为ConsumerApplication,代码如下:

package ltd.newbee.cloud;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class ConsumerApplication {

    public static void main(String[] args) {
        SpringApplication.run(ConsumerApplication.class, args);
    }

}

将服务注册至Nacos

完成基础的编码后,接下来就要把nacos-consumer-demo注册到Nacos中去。在application.properties配置文件添加Nacos配置项即可,代码如下所示

# 项目启动端口
server.port=8093
# 应用名称
spring.application.name=newbee-cloud-consumer-service
# 服务中心Nacos地址
spring.cloud.nacos.discovery.server-addr=47.114.141.185:17748
# 登录名(默认为nacos,可自行修改)
spring.cloud.nacos.username=nacos
# 登录密码(默认为nacos,可自行修改)
spring.cloud.nacos.password=nacos

在这里插入图片描述
注册至Nacos成功后,接下来就要编写服务通信相关的代码了。

编写服务通信代码

借助RestTemplate工具实现Nacos间的服务通信。

在newbee-cloud-consumer-service项目中新建config包,并新建RestTemplate的配置类,代码如下:

package ltd.newbee.cloud.config;

import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.client.ClientHttpRequestFactory;
import org.springframework.http.client.SimpleClientHttpRequestFactory;
import org.springframework.http.converter.StringHttpMessageConverter;
import org.springframework.web.client.RestTemplate;

import java.nio.charset.Charset;

@Configuration
public class RestTemplateConfig {

    @LoadBalanced //负载均衡
    @Bean
    public RestTemplate restTemplate(ClientHttpRequestFactory factory) {
        RestTemplate restTemplate = new RestTemplate(factory);
        // UTF-8编码设置
        restTemplate.getMessageConverters().set(1,
                new StringHttpMessageConverter(Charset.forName("UTF-8")));
        return restTemplate;

    }

    @Bean
    public ClientHttpRequestFactory simpleClientHttpRequestFactory() {
        SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory();
        // 超时时间 10秒
        factory.setReadTimeout(10 * 1000);
        // 超时时间 5秒
        factory.setConnectTimeout(5 * 1000);
        return factory;
    }
}

不仅仅需要添加@LoadBalanced注解,消费端在发起调用时需要添加负载均衡模块,所以需要在nacos-consumer-demo中引入如下依赖:

<!-- 负载均衡模块 -->
<dependency>
  <groupId>org.springframework.cloud</groupId>
  <artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>

ConsumerTestController类中新增如下代码:

private final String SERVICE_URL = "http://newbee-cloud-goods-service";

// 通过Nacos调用下级服务
@GetMapping("/consumerTest")
public String consumerTest() {
  return restTemplate.getForObject(SERVICE_URL + "/goodsServiceTest", String.class);
}

上述代码中,SERVICE_URL变量的写法变成了“http://”+服务名称,而不是“http://”+IP+端口号。不过,由于服务中心的存在,这样也能够完成对newbee-cloud-goods-service的调用。启动newbee-cloud-consumer-service项目,打开浏览器并输入如下地址:

http://localhost:8093/consumerTest

在这里插入图片描述

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/157884.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

谈一谈暴露偏差

文章由参考文章重新组合而来。 暴露偏差又叫Exposure Bias&#xff0c;是由Teacher Forcing 导致的。 Teacher Forcing Teacher Forcing 是一种用于序列生成任务的训练技巧&#xff0c;与Autoregressive模式相对应&#xff0c;这里阐述下两者的区别&#xff1a; Autoregres…

【Flink系列】部署篇(一):Flink集群部署

主要回答以下问题&#xff1a; Flink集群是由哪些组件组成的&#xff1f;它们彼此之间如何协调工作的&#xff1f;在Flink中job, task, slots,parallelism是什么意思&#xff1f;集群中的资源是如何调度和分配的&#xff1f;如何搭建一个Flink集群&#xff1f;如何配置高可用服…

目标检测再升级!YOLOv8模型训练和部署

一个不知名大学生&#xff0c;江湖人称菜狗 original author: jacky Li Email : 3435673055qq.com Time of completion&#xff1a;2023.1.12 Last edited: 2023.1.12 目录 目标检测再升级&#xff01;YOLOv8模型训练和部署 简介 YOLOv8创新改进点 区别 1、C2f模块是什么&…

探索与创新:低代码助力金融数字化转型发展

“十四五”规划和 2035 年远景目标纲要提出“加快数字化发展&#xff0c;建设数字中国”&#xff0c;并就打造数字经济新优势、加快数字社会建设步伐、提高数字政府建设水平、营造良好数字生态作出战略部署。这为数字中国的下一步发展指明了方向&#xff0c;提供了指引。可以说…

CentOS环境下Rabbit集群部署

前言本次Rabbit集群部署所使用的的软件版本erlang&#xff1a;erlang-23.3.3-1.el7.x86_64.rpm &#xff0c;rabbitmq&#xff1a;rabbitmq-server-3.8.23-1.el7.noarch.rpm本次Rabbit集群部署需要安装在两台CentOS服务器分别为svr-app-rabbitmq01、svr-app-rabbitmq02&#xf…

Trime同文输入法JNI加载过程

Trime同文输入法JNI加载过程JNI初始化顺序第一步、加载librime_jni.so库第二步、自动注册机制第三步、正式加载librime_jni.so库插入一个话题、简化打印记录第四步、执行Rime.java中的init()方法LoadModules()LoadModule()rime_core_initialize()调用顺序Class不是class关键字&…

3D应用无需下载即点即用,云应用带来更轻量的元宇宙

最近一个程序员朋友告诉我&#xff0c;公司市场部想做一个元宇宙相关的互动游戏&#xff0c;于是给技术团队提了一个带用户线上沉浸式环游园区的H5开发需求。他摸着所剩无几的头发据理力争&#xff1a;这个需求真的做不了&#xff01;我听了很疑惑&#xff0c;现在许多品牌都在…

工作流引擎架构设计

原文链接&#xff1a; 工作流引擎架构设计 最近开发的安全管理平台新增了很多工单申请流程需求&#xff0c;比如加白申请&#xff0c;开通申请等等。最开始的两个需求&#xff0c;为了方便&#xff0c;也没多想&#xff0c;就直接开发了对应的业务代码。 但随着同类需求不断增…

深度学习PyTorch 之 网络结构可视化

深度学习&PyTorch 之 DNN-回归 深度学习&PyTorch 之 DNN-回归&#xff08;多变量&#xff09; 分别介绍了DNN回归的方法和代码&#xff0c;但是模型建立好了&#xff0c;他到底是个什么样子呢&#xff1f; 我们这节给大家介绍一个查看模型结构的方法 可视化介绍 我们…

【信管8.1】项目人力资源管理概念及过程

项目人力资源管理概念及过程不管你做什么事&#xff0c;要成就什么事业&#xff0c;要做什么项目&#xff0c;这一切&#xff0c;都是由人来完成的。因此&#xff0c;人力资源对于项目管理来说&#xff0c;是非常重要的一个管理过程。同时&#xff0c;人力资源管理也是整个管理…

2023/1/11 Web前端Promise从入门到精通

ES6引入的进行异步编程的解决方案&#xff0c;从语法上说它是一个构造函数。 异步编程包括但不限于&#xff1a;文件操作、数据库操作、AJAX、定时器 为什么要用Promise&#xff1f; 之前进行异步编程直接通过回调函数的方式进行&#xff0c;会导致回调地狱。 回调函数&#…

Qt扫盲-QMenu理论总结

QMenu理论总结一、概述二、常用操作1. 添加Action2. 信号槽3. 可撕下菜单4. 展示菜单一、概述 QMenu其实就是菜单控件&#xff0c;菜单控件本质上就是一个选择项目。它可以是菜单栏中的下拉菜单&#xff0c;也可以是独立的上下文菜单。当用户单击相应的位置或按下指定的快捷键…

【大数据】第一章:了解Hadoop生态圈

大数据特点&#xff08;4V&#xff09; Volume(大量) 非常非常多&#xff0c;大企业数据接近1EB Velocity(高速) 比如在双十一&#xff0c;数据爆增 Variety(多样) 很多样子的数据&#xff0c;比如&#xff0c;代码&#xff0c;图片&#xff0c;视频&#xff0c;JSON&am…

【C++】八大排序

文章目录前言1. 插入排序2. 希尔排序3. 选择排序4. 堆排序5. 冒泡排序6. 快速排序(重点)6.1 快速排序(hoare版本)6.2 快速排序(挖坑法)6.3 快速排序(前后指针法)6.4 快速排序(非递归)6.5 快速排序(优化)7. 归并排序7.1 归并排序(递归实现)7.2 归并排序非递归实现8. 计数排序排序…

Docker搭建PHP运行环境

目录 Docker 安装 PHP Docker 安装 Nginx ​编辑运行nginx容器 nginx安装成功 Nginx PHP 部署PHP项目 启动 PHP&#xff1a; 启动 nginx&#xff1a; 查看正在运行的容器: 访问域名测试搭建结果 Docker相关命令描述 Docker 安装 PHP 这里我们拉取官方的镜像,标签…

代码随想录算法训练营第8天 344.反转字符串、541. 反转字符串II、剑指Offer58-II.左旋转字符串

代码随想录算法训练营第8天 344.反转字符串、541. 反转字符串II、剑指Offer58-II.左旋转字符串 反转字符串 力扣题目链接(opens new window) 编写一个函数&#xff0c;其作用是将输入的字符串反转过来。输入字符串以字符数组 char[] 的形式给出。 对于字符串&#xff0c;我…

Linux驱动开发基础__Linux 系统对中断处理的演进

目录 1 Linux 对中断的扩展&#xff1a;硬件中断、软件中断 2 中断处理原则 1&#xff1a;不能嵌套 3 中断处理原则 2&#xff1a;越快越好 4 要处理的事情实在太多&#xff0c;拆分为&#xff1a;上半部、下半部 5 下半部要做的事情耗时不是太长&#xff1a;tasklet…

154. 滑动窗口

文章目录QuestionIdeasCodeQuestion 给定一个大小为 n≤106 的数组。 有一个大小为 k 的滑动窗口&#xff0c;它从数组的最左边移动到最右边。 你只能在窗口中看到 k 个数字。 每次滑动窗口向右移动一个位置。 以下是一个例子&#xff1a; 该数组为 [1 3 -1 -3 5 3 6 7]&…

知识点滴 - 数据库视图概念

视图是数据库中一个非常简单的概念&#xff0c;写过SQL的人几乎大致了解视图。本文除了在回顾视图的本质及相关操作知识时&#xff0c;会重点阐述它蕴含的分层思想在数据分析工作中的作用。 1&#xff0c;视图的本质与作用 视图是一个数据库中的虚拟表&#xff0c;它的本质是S…

模板特化与static成员初始化

我们知道在 c 的类中&#xff0c;如果有static成员数据&#xff0c;则需要在类外进行定义&#xff0c;而类内那只是声明。这个在类模板中也是一样的&#xff0c;需要在类外进行定义。普通类模板的 static 数据的初始化&#xff0c;如下代码&#xff1a; template <class T&…