SpringCloud 微服务拆分小Demo(下)

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第4天,点击查看活动详情

前言

书接上回: SpringCloud 微服务拆分小Demo(上)

那么这里的话,其实还是要简单一点,当然本来我是打算这样的:

在这里插入图片描述

但是成萧何,败也萧何,当初SpringBoot单体项目构建的时候图方便,没怎么考虑,就是单纯用Map实现,然后用Session做服务验证。没有考虑使用redis存储,而在我们分布式微服务当中,如果我们把服务拆分了,那么对应的是不同的域名(端口) 这样一来,session无法做到跨域。如下图: 在这里插入图片描述

而解决方法也是redis,SpringBoot 提供了一套方案,把不同的域名的session存起来,然后设置那些域名公用一套session,主要是里面的值嘛(当然我们也可以自己实现,提取Module组件,搞一个全局Map存session)

在这里插入图片描述

那么这里的话,其实还是要简单一点,当然本来我是打算这样的:

在这里插入图片描述

但是成萧何,败也萧何,当初SpringBoot单体项目构建的时候图方便,没怎么考虑,就是单纯用Map实现,然后用Session做服务验证。没有考虑使用redis存储,而在我们分布式微服务当中,如果我们把服务拆分了,那么对应的是不同的域名(端口) 这样一来,session无法做到跨域。如下图: 在这里插入图片描述

而解决方法也是redis,SpringBoot 提供了一套方案,把不同的域名的session存起来,然后设置那些域名公用一套session,主要是里面的值嘛(当然我们也可以自己实现,提取Module组件,搞一个全局Map存session)

扫描二维码关注公众号,回复: 14229142 查看本文章

在这里插入图片描述

Login服务保留聊天(跨域问题)

所以没有办法,我们任然需要Login服务保留聊天服务,这个时候也许叫Login服务已经不合适了,因为这哪是Login服务呀,但是这里我们就先姑且叫这个为Login服务吧,不改了,费劲。

完整的项目如下: 在这里插入图片描述 我们直接保留聊天的在LoginClient里面,于是: 在这里插入图片描述

那么这个时候,就不用做拆分了嘛,当然不是。

别忘了,我们存储聊天记录的时候是即使的,这样做是很容易蹦掉的,所以,这里我们引入消息队列。

引入RabbitMQ

我们专门对LoginClient服务做如下改动 首先是配置

<!--        消息转化器-->
        <dependency>
            <groupId>com.fasterxml.jackson.dataformat</groupId>
            <artifactId>jackson-dataformat-xml</artifactId>
        </dependency>





        <!-- amqp 消息队列依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-amqp</artifactId>
        </dependency>
复制代码

然后是配置类,这个主要是用来做消息对象序列化转为json的,因为默认是传输Java对象的时候会变成序列化字符。这里为了节约空间和资源,转为json


@Configuration
public class JsonMQ {

    @Bean
    public MessageConverter jsonMessageConverter(){

        return new Jackson2JsonMessageConverter();
    }
}

复制代码

最后是我们不在我们这里进行存储了,而是专门让一个服务存储 在这里插入图片描述

RabbitMQ配置

我在RabbitMQ 里面专门创建了一个用户 在这里插入图片描述

  rabbitmq:
    host: 127.0.0.1
    port: 5672
    virtual-host: /huterox
    username: huterox
    password: 865989840

复制代码

在消息发送者,和消费者里面都这样设置就完了。

消费者存储

我们这个时候看到这个玩意 在这里插入图片描述 其实没啥,就是把原来消息存储的那些Server搞过来了 在这里插入图片描述

此外,我们还要在这里创建一个队列,当然也可以直接用注解,只是我这里习惯配置类,

image.png

总结

到此,一个很简单的微服务拆分案例就无了,不过现在这个拆分方法并不好,最理想的方案是拆分,5个微服务,登录,注册,用户管理,聊天,聊天存储。然后用户管理服务既作为一个服务,也作为一个组件Moudle,当然这里也能单独把用户相关的pojo,之类的单独作为一个组件,然后登录,注册,用户管理(CURD)来使用它,然后三者用feign通信。 然后就是聊天和存储,这个就是消息队列干的事情,不过他们之间还需要一个聊天消息的服务可以拆出来,或者拆出来一个组件,至于跨域就在用redis。

但是我这里不这样干,原因很简单,本来没啥好拆的,我就是单纯为了期末作业,并且期末作业要演示,用的东西多了我本地不好演示,我的内网服务器没法在教室访问,因为网段不一样,网络服务器,没有小钱钱了啦丫!

猜你喜欢

转载自juejin.im/post/7105277949003202597