一、springcloud 实现简单的 消费者和生产者 模式(Restfule 的风格)

    1.实现简单的消费者和生产者
springcloud使用的http协议进行传输数据,也就是说springcloud仍然使用的是RESTFUL的风格 1.1.搭建工程(!!!springboot的项目是否需要运行都打jar包!!!(springboot工程中不需要war包))
搭建一个总的父级工程
20190926-springcloud-parent(pom):只做jar包的管理 把SRC 目录干掉 // 问题一、pom是啥?
<packaging>pom</packaging>
POM是最简单的打包类型。它生成的构件只是它本身。
pom 项目里没有java代码,也不执行任何代码,只是为了聚合工程或传递依赖用的。 // 问题二、jar和war和pom的区别 ?
/*
pom是maven依赖文件
jar是java普通项目打包
war是java web项目打包
*/ 在总的父级项目(20190926-springcloud-parent)下有新建三个子级项目。 把这三个项目的 SRC 目录干掉,因为他们都是父级项目。不须要。
20190926-springcloud-management
20190926-springcloud-provider-management
20190926-springcloud-consumer-management

二、    1.搭建常规工程        

            1.1    20190926-springcloud-management(pom):只做jar包的管理
--20190926-springcloud-model(jar)
--20190926-springcloud-mapper(jar)--->依赖于model
--20190926-springcloud-service(jar)--->依赖于mapper
@Service:是spring框架所提供的 1.2搭建服务生产者工程 依赖于service
20190926-springcloud-provider-management(pom):只做jar包的管理
20190926-springcloud-provider-8081(jar):需要提供数据,
也就是说必须要连接数据库,对数据库做增删改查(springboot-web-starter,mysql驱动包,mybatis包,druid包...)--->依赖于service 1.3搭建服务消费者工程 consumer 消费者 依赖于model
20190926-springcloud-consumer-management(pom):只做jar包的管理
20190926-springcloud-consumer-6081(jar):只需要和客户端打交道(只需要页面),
不再需要数据的支持,所有的数据来源都来源于provider--->依赖于model

三、jar包管理,如何添加jar包?

  1.最高级的jar包 20190926-springcloud-parent

<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion> <groupId>com.aaa</groupId>
<artifactId>20190927-springcloud-parent</artifactId>
<version>1.0-SNAPSHOT</version>
<modules>
<module>202190927-springcloud-management</module>
<module>20190927-springcloud-provider-management</module>
<module>20190927-springcloud-consumer-management</module>
</modules> <packaging>pom</packaging> <!--
项目jar包的构建:
之前使用的parent标签直接引入项目中,可以继承父项目的jar包
但是项目中已经使用到了springcloud和springboot
springcloud和springboot需要些两个parent,但是在pom工程中不能这样实现
所以直接引入springboot和springcloud的jar包工程,并且使用dependencyManagement标签进行管理,用到了什么jar包直接重写 springboot-parent, springcloud-parent的父级工程都是dependencies
-->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.1.8.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Greenwich.SR3</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>io.zipkin.java</groupId>
<artifactId>zipkin-server</artifactId>
<version>2.11.8</version>
<exclusions>
<exclusion>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-slf4j-impl</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>io.zipkin.java</groupId>
<artifactId>zipkin-autoconfigure-ui</artifactId>
<version>2.11.8</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.0.4</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.0.31</version>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.0</version>
</dependency>
</dependencies>
</dependencyManagement> </project>

2.   20190926-springcloud-consumer-management  消费者的父级架构。

<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>20190927-springcloud-parent</artifactId>
<groupId>com.aaa</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion> <artifactId>20190927-springcloud-consumer-management</artifactId> <packaging>pom</packaging>
<modules>
<module>20190927-springcloud-consumer-6081</module>
</modules> </project>

2.1  子级架构      20190926-springcloud-consumer-6081?---------依赖于model

<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>20190927-springcloud-consumer-management</artifactId>
<groupId>com.aaa</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion> <artifactId>20190927-springcloud-consumer-6081</artifactId> <!--
消费者 依赖于 model 和页面交互
--> <dependencies>
<dependency>
<groupId>com.aaa</groupId>
<artifactId>20190927-springcloud-model</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency> <!--
微服务,将 spring-boot-starter-web添加进来 需要修改默认的端口号。
--> <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency> </dependencies> </project>

3.  20190926-springcloud-provider-management 生产者

<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>20190927-springcloud-parent</artifactId>
<groupId>com.aaa</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion> <artifactId>20190927-springcloud-provider-management</artifactId> <packaging>pom</packaging>
<modules>
<module>20190927-springcloud-provider-8081</module>
</modules> </project>

3.1  子级架构  20190926-springcloud-provider-8081?---------依赖于service

<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>20190927-springcloud-provider-management</artifactId>
<groupId>com.aaa</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion> <artifactId>20190927-springcloud-provider-8081</artifactId> <dependencies>
<dependency>
<groupId>com.aaa</groupId>
<artifactId>20190927-springcloud-service</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies> </project>

4.   20190926-springcloud-management(pom) 。

<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>20190927-springcloud-parent</artifactId>
<groupId>com.aaa</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion> <artifactId>202190927-springcloud-management</artifactId>
<!-- pom 做jar包的管理。
-->
<packaging>pom</packaging>
<modules>
<module>20190927-springcloud-model</module>
<module>20190927-springcloud-mapper</module>
<module>20190927-springcloud-service</module>
</modules> </project>

4.1 mapper 项目的jar包管理。------------依赖于 model。

<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>202190927-springcloud-management</artifactId>
<groupId>com.aaa</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion> <artifactId>20190927-springcloud-mapper</artifactId> <dependencies>
<dependency>
<groupId>com.aaa</groupId>
<artifactId>20190927-springcloud-model</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency> <!--
需要引入mysql mybatis springboot druid
-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
</project>

4.2 service项目?-------------依赖于 mapper

<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>202190927-springcloud-management</artifactId>
<groupId>com.aaa</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion> <artifactId>20190927-springcloud-service</artifactId> <dependencies>
<dependency>
<groupId>com.aaa</groupId>
<artifactId>20190927-springcloud-mapper</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies> </project>

 

4.3 model?

<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>202190927-springcloud-management</artifactId>
<groupId>com.aaa</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion> <artifactId>20190927-springcloud-model</artifactId> </project>

 四、创建config 包,添加配置文件?

4.1  消费者consumer 的配置?

  

4.2 生产者provider 的配置?

  

五、实现Restfule的风格,消费者的controller  调用生产者的controller

5.1  model

package com.aaa.zxf.model;

import java.io.Serializable;

public class User implements Serializable {
private long id;
private String name;
private long age; public User() {
} public User(long id, String name, long age) {
this.id = id;
this.name = name;
this.age = age;
} public long getId() {
return id;
} public void setId(long id) {
this.id = id;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public long getAge() {
return age;
} public void setAge(long age) {
this.age = age;
} @Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false; User user = (User) o; if (id != user.id) return false;
if (age != user.age) return false;
return name != null ? name.equals(user.name) : user.name == null; } @Override
public int hashCode() {
int result = (int) (id ^ (id >>> 32));
result = 31 * result + (name != null ? name.hashCode() : 0);
result = 31 * result + (int) (age ^ (age >>> 32));
return result;
} @Override
public String toString() {
return "User{" +
"id=" + id +
", name='" + name + '\'' +
", age=" + age +
'}';
}
}

5.2   mapper

package com.aaa.zxf.mapper;

import com.aaa.zxf.model.User;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select; import java.util.List; @Mapper
public interface UserMapper { // 利用注解的方式 ,查询数据库
@Select("select id,name,age from user")
List<User> selectAll(); }

5.3   service

package com.aaa.zxf.service;

import com.aaa.zxf.mapper.UserMapper;
import com.aaa.zxf.model.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import java.util.List; @Service
public class UserService { @Autowired
private UserMapper userMapper; public List<User> selectAllUsers() {
return userMapper.selectAll();
} }

5.4   provider的controller

package com.aaa.zxf.controller;
import com.aaa.zxf.model.User;
import com.aaa.zxf.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List; @RestController
public class UserController { // 注入依赖
@Autowired
private UserService userService; /**
* 获得所有的用户信息。
* @return
*/
@RequestMapping("/userAll")
public List<User> selectAllUsers()
{
System.out.println("8081");
return userService.selectAllUsers();
} }

  

   

  Restful的具体的实现,consumer 的controller。

package com.aaa.zxf.controller;

import com.aaa.zxf.model.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate; import java.util.List; @RestController
public class UserController { @Autowired
private RestTemplate restTemplate; /**
*调用 service ,consumer项目的controller 调用的是 provider项目的controller (遵循 http 协议)
*
* 模拟http协议,就可以实现,两个controller之间的调用。
*
* getForObject: 使用get 请求方式, 该方法有两个参数。
*
* 1. URL 请求的路径 localhost:8081/userAll
* 2. 规定的返回值类型
*
     注意! 将provider 和 consumer 两者之间的 RequestMapping 的路径 ,保持一致!!!
* @return
*/
@RequestMapping("/userAll")
public List<User> selectAllUsers()
{
return restTemplate.getForObject("http://localhost:8081/userAll",List.class); }
}

六,consumer的config配置?

  

    

springcloud 实现简单的 消费者和生产者 模式(Restfule 的风格)的更多相关文章

  1. java多线程-消费者和生产者模式

    /* * 多线程-消费者和生产者模式 * 在实现消费者生产者模式的时候必须要具备两个前提,一是,必须访问的是一个共享资源,二是必须要有线程锁,且锁的是同一个对象 * */ /*资源类中定义了name( ...

  2. java并发:初探消费者和生产者模式

    消费者和生产者模式 用继承Thread方式,用wait和notifyAll方法实现. 消费者和生产者模式的特点 1. 什么时候生产:仓库没有满的时候,生产者这可以生产,消费者也可以消费,仓库满的时候停 ...

  3. java多线程同步以及线程间通信详解&消费者生产者模式&死锁&Thread.join()(多线程编程之二)

    本篇我们将讨论以下知识点: 1.线程同步问题的产生 什么是线程同步问题,我们先来看一段卖票系统的代码,然后再分析这个问题: package com.zejian.test; /** * @author ...

  4. Lucene.net站内搜索—4、搜索引擎第一版技术储备(简单介绍Log4Net、生产者消费者模式)

    目录 Lucene.net站内搜索—1.SEO优化 Lucene.net站内搜索—2.Lucene.Net简介和分词Lucene.net站内搜索—3.最简单搜索引擎代码Lucene.net站内搜索—4 ...

  5. Java多线程消费者、生产者的基本思路

    多线程主要考察的就是 线程的同步控制   生产者消费者的思路就是,当 一个线程执行时让另一个线程 挂起就行了 ThreadOne.ThreadTwo同时运行,添加一个变量在一个公共类(下边的Funct ...

  6. C#设计模式之5:简单工厂和工厂方法模式

    工厂模式包含三种,简单工厂模式,工厂方法模式,抽象工厂模式.这三种都是解决了一个问题,那就是对象的创建问题.他们的职责就是将对象的创建和对象的使用分离开来. 当我们创建对象的时候,总是会new一个对象 ...

  7. springcloud+eureka简单入门案例

    springcloud+eureka简单入门案例 一.服务提供者 直接提供服务,入门案例没有特别要设置的地方,注意下端口,由于要启动多个服务,可能会冲突 配置文件(src/main/resources ...

  8. 「 从0到1学习微服务SpringCloud 」05服务消费者Fegin

    系列文章(更新ing): 「 从0到1学习微服务SpringCloud 」01 一起来学呀! 「 从0到1学习微服务SpringCloud 」02 Eureka服务注册与发现 「 从0到1学习微服务S ...

  9. Java程序设计之消费者和生产者

    新建一个Break类,表示食物数量. public class Break { public static final int MAX = 10; //最多一次性煮十个面包 Stack<Inte ...

随机推荐

  1. 【剑指Offer】二叉树的镜像 解题报告(Python)

    [剑指Offer]二叉树的镜像 解题报告(Python) 标签(空格分隔): LeetCode 题目地址:https://www.nowcoder.com/ta/coding-interviews 题 ...

  2. idea使用教程-常用设置

    [1]进入设置: [2]设置主题: [3]编辑区的字体变大或者变小: [4]鼠标悬浮在代码上有提示: [5]自动导包和优化多余的包: 手动导包:快捷键:alt+enter 自动导包和优化多余的包: [ ...

  3. 【Azure API 管理】为调用APIM的请求启用Trace -- 调试APIM Policy的利器

    问题描述 在APIM中,通过门户上的 Test 功能,可以非常容易的查看请求的Trace信息,帮助调试 API 对各种Policy,在Inbound,Backend, Outbound部分的耗时问题, ...

  4. 第六个知识点:我们怎么把NP问题解释成一组可以在多项式内证明的命题

    第六个知识点:我们怎么把NP问题解释成一组可以在多项式内证明的命题 原文地址:http://bristolcrypto.blogspot.com/2014/11/52-things-number-6- ...

  5. mysql多条件过滤查询之mysq高级查询

    一.什么是高级查询: ① 多条件的过滤查询 简单说,即拼接sql语句,在sql查询语句之后使用: where 条件1 and/or 条件2 and/or 条件3 - ② 分页查询 二.多条件过滤查询: ...

  6. matplotlib 进阶之Artist tutorial(如何操作Atrist和定制)

    目录 基本 plt.figure() fig.add_axes() ax.lines set_xlabel 一个完整的例子 定制你的对象 obj.set(alpha=0.5, zorder=2), o ...

  7. v75.01 鸿蒙内核源码分析(远程登录篇) | 内核如何接待远方的客人 | 百篇博客分析OpenHarmony源码

    子曰:"不学礼,无以立 ; 不学诗,无以言 " <论语>:季氏篇 百篇博客分析.本篇为: (远程登录篇) | 内核如何接待远方的客人 设备驱动相关篇为: v67.03 ...

  8. 云南农职 - 互联网技术学院 - 美和易思大一SCME JAVA高级结业考试机试试题

    目录 一.语言和环境 二.实现功能 1.文件复制功能(IO) 2.消息接受站建设 三.评分标准 四.实现代码 一.语言和环境 实现语言:Java. 开发工具:eclipse. 使用技术:IO流+网络编 ...

  9. docker启动emqx官方镜像,顺便启动exporter

    注意,我是把把官方镜像放到了自己的仓库 1.emqx官方镜像启动 docker run -d --name emqx31 -p 1883:1883 -p 8083:8083 -p 8883:8883 ...

  10. SpringBoot 与 SpringCloud 的版本对应详细信息

    "spring-cloud": { "Finchley.M2": "Spring Boot >=2.0.0.M3 and <2.0.0.M ...