springboot+docker实现微服务的小例子

【任务】:
创建一个服务A:service_hello
创建一个服务B:service_name

service_name负责提供一个api接口返回一个name字符串。
service_hello负责从这个接口获取name字符串,然后进行一个字符串拼接,在后面加一个hello,最后输出。

这就构成了一个最简单的微服务。微服务之间通过http的api接口可以互相交换数据。配合完成一个大工作。


Service_name微服务

首先实现service_name这个微服务:
可以直接利用这个网站:https://start.spring.io/ 创建一个springboot项目

在controller部分就简单的定义一个api:
功能非常简单,就是返回一个"Jerry!"字符串

package com.example.service_name.controller;import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
public class MainController {@GetMapping("/name")public String name() {return "Jerry!";}}

经过本地测试一切ok之后,将该项目通过maven打成一个jar包:
使用maven命令:mvn clean package

最后会在项目的target目录下形成一个jar包。可以直接通过

java -jar XXX.jar 

来运行这个jar包


然后在IDEA里面安装docker插件。在项目根目录下编写Dockerfile文件

内容大致如下即可:

# 使用一个基础的Java镜像作为基础
FROM openjdk:22-slim# 设置工作目录
WORKDIR /app# 将应用程序的JAR文件复制到容器中
COPY target/service_name-0.0.1-SNAPSHOT.jar .# 暴露应用程序的端口
EXPOSE 8081# 设置启动命令
CMD ["java", "-jar", "service_name-0.0.1-SNAPSHOT.jar"]

然后使用

docker build -t service_name .

来将项目打包成一个名为service_name的镜像。

打包好的镜像存放在本地的docker仓库里面,可以使用命令:

docker images

查看本地镜像。


然后通过

docker run -p 8081:8081 service_name

命令可以直接运行service_name镜像,运行之后就成容器了。

这时候我们在浏览器输入localhost:8081/name就可以直接查看到字符串“Jerry!”输出到网页上了

那么目前service_name这个微服务我们就部署完毕!


Service_hello微服务

接下来我们就创建Service_hello这个微服务,来使用service_name提供的api完成功能

在Service_hello里面主要流程和前面一样,主要有几个小区别

首先会加一个配置类,因为需要用到RestTemplate去进行http通信。
所以在config包里面创建一个类:

package com.example.service_hello.config;import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;@Configuration
public class AppConfig {@Beanpublic RestTemplate restTemplate() {return new RestTemplate();}}

controller里面有一些修改:

package com.example.service_hello.controller;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;@RestController
public class MainController {@Autowiredprivate RestTemplate restTemplate;@GetMapping("/hello")public String hello() {//service_name的api地址String url = "http://localhost:8081/name";ResponseEntity<String> response = restTemplate.getForEntity(url, String.class);return response.getBody() + ", Hello!";}
}

最后在本地浏览器输入:
localhost:8081/hello
之后就可以看到浏览器的结果了:

在这里插入图片描述


【总结】

本文使用 docker技术,实现了一个非常简单的微服务架构demo。

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux - 借助 inotifywait,轻松实现 Linux 文件/目录事件监听

文章目录 inotify-tools 依赖包使用示例 inotify-tools 依赖包 [rootVM-24-3-centos ~]# yum install inotify-tools Loaded plugins: fastestmirror, langpacks Repository epel is listed more than once in the configuration Determining fastest mirrors ...... ...... ..…

市面上那里有稳定L2股票行情数据接口?

随着市场的发展和技术的进步&#xff0c;level2股票行情数据接口已经成为股票交易软件的标准配置之一。虽然这些券商软件的功能在很大程度上相似&#xff0c;但它们仍然有自己的特点和优势。 例如&#xff1a;通过股票交易所以其专业的研究报告和丰富的信息服务而受到广泛关注&…

uniapp - 全平台兼容实现上传图片带进度条功能,用户上传图像到服务器时显示上传进度条效果功能(一键复制源码,开箱即用)

效果图 uniapp小程序/h5网页/app实现上传图片并监听上传进度,显示进度条完整功能示例代码 一键复制,改下样式即可。 全部代码 记得改下样式,或直接

实验篇——家族成员染色体位置分析

实验篇——家族成员染色体位置分析 文章目录 前言一、名词解释二、实操1. 获取存储基因ID的文件2. 获取基因密度文件3. 获取染色体文件4. 执行 总结 前言 在基因家族分析中&#xff0c;通过观察基因家族成员在染色体上的位置。可以判断在染色体上是否成簇分布。 一、名词解释 …

【Python原创毕设|课设】基于Python Flask的上海美食信息与可视化宣传网站项目-文末附下载方式以及往届优秀论文,原创项目其他均为抄袭

基于Python Flask的上海美食信息与可视化宣传网站&#xff08;获取方式访问文末官网&#xff09; 一、项目简介二、开发环境三、项目技术四、功能结构五、运行截图六、功能实现七、数据库设计八、源码获取 一、项目简介 随着大数据和人工智能技术的迅速发展&#xff0c;我们设…

stm32之5.长按按键(使用时钟源)调整跑马灯速度

------------------------------ 源码 #include <stm32f4xx.h> #include "led.h" #include "delay.h" #include "my_str.h" #include "beep.h" #include "key.h" int main(void) { key_init(); Led_init();…

完美解决微信小程序使用复选框van-checkbox无法选中

由于小程序使用了vant-ui框架&#xff0c;导致checkbox点击无法选中问题 <van-checkbox value"{{ checked }}" shape"square"><view class"check-content"><view class"checktext">我已阅读并同意>《用户协议》…

使用StorageClass动态创建pv

rook-ceph安装部署到位后&#xff0c;就可以开始来尝试使用StorageClass来动态创建pv了。 有状态的中间件在kubernetes上落地基本上都会用到StorageClass来动态创建pv&#xff08;对于云上应用没有那么多烦恼&#xff0c;云硬盘很好用&#xff0c;但是对于自己学习和练习来说还…

kubernetes--技术文档-真--集群搭建-三台服务器一主二从(非高可用)-三服务器位于同交换机中

在使用k8s之前如果不太熟悉k8s的可以先看这个文章&#xff1a; kubernetes--技术文档--基本概念--《10分钟快速了解》_一单成的博客-CSDN博客 三节点相同安装操作&#xff1a; 1、设置hosts解析 根据角色在三个服务器中运行&#xff0c;设置自己的hostname。 标识&#xf…

Linux:编写编译脚本Makefile文件

一、生成可执行文件 1、一个源文件编译 本例子主要区别.c及.cpp文件及编译该文件时使用的编译链。 1).c文件 // testadd.c #include <stdio.h> int main() {int a 1;int b 2;int sum a b;printf("sum %d\n", sum);return 0; }// Makefie GXX g CC gcc…

无涯教程-PHP - XML GET

XML Get已用于从xml文件获取节点值。以下示例显示了如何从xml获取数据。 Note.xml 是xml文件&#xff0c;可以通过php文件访问。 <SUBJECT><COURSE>Android</COURSE><COUNTRY>India</COUNTRY><COMPANY>LearnFk</COMPANY><PRICE…

Android开发之性能优化:过渡绘制解决方案

1. 过渡绘制 屏幕上某一像素点在一帧中被重复绘制多次&#xff0c;就是过渡绘制。 下图中多个卡片跌在一起&#xff0c;但是只有第一个卡片是完全可见的。背后的卡片只有部分可见。但是Android系统在绘制时会将下层的卡片进行绘制&#xff0c;接着再将上层的卡片进行绘制。但其…