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!"字符串

java 复制代码
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 复制代码
java -jar XXX.jar 

来运行这个jar包


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

内容大致如下即可:

java 复制代码
# 使用一个基础的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"]

然后使用

bash 复制代码
docker build -t service_name .

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

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

c 复制代码
docker images

查看本地镜像。


然后通过

c 复制代码
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包里面创建一个类:

java 复制代码
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 {
    @Bean
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }

}

controller里面有一些修改:

java 复制代码
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 {
    @Autowired
    private 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。

相关推荐
南猿北者34 分钟前
docker容器
docker·容器
苹果醋342 分钟前
Java8->Java19的初步探索
java·运维·spring boot·mysql·nginx
二十雨辰1 小时前
[linux]docker基础
linux·运维·docker
Wx-bishekaifayuan1 小时前
django电商易购系统-计算机设计毕业源码61059
java·spring boot·spring·spring cloud·django·sqlite·guava
customer081 小时前
【开源免费】基于SpringBoot+Vue.JS周边产品销售网站(JAVA毕业设计)
java·vue.js·spring boot·后端·spring cloud·java-ee·开源
time never ceases1 小时前
使用docker方式进行Oracle数据库的物理迁移(helowin/oracle_11g)
数据库·docker·oracle
Yaml42 小时前
智能化健身房管理:Spring Boot与Vue的创新解决方案
前端·spring boot·后端·mysql·vue·健身房管理
LuckyLay2 小时前
Spring学习笔记_27——@EnableLoadTimeWeaving
java·spring boot·spring
佳佳_3 小时前
Spring Boot 应用启动时打印配置类信息
spring boot·后端
MonkeyKing_sunyuhua3 小时前
ubuntu22.04 docker-compose安装postgresql数据库
数据库·docker·postgresql