Mq之pulsar的入门使用(一)

目录

一、linux集群安装pulsar

  • 注意事项
    • 编辑 /etc/hostname与/etc/hosts
    • 执行初始化命令

二、创建应用程序对消息的生产和消费进行测试

  • 物理主机启动应用发送消息时报错处理
  • 程序的搭建及说明
  • 使用到的pom依赖
  • springboot中pulsar配置
  • 接收消息
  • 模拟发送消息
  • 发送与接收消息打印输出

总结

  • docker容器的部署效率会更高
  • 错误问题继续排查
  • pulsar的部署需要搭配的内容真不少
  • websocket与pulsar还可以进行搭配

一、linux集群安装pulsar 详情可查看这里 》》

注:也采用docker进行安装后期会补充, 并挂载链接 》》
注:按照教程我的部署策略是对一台系统部署后,再对此台系统进行克隆,后修改其他两台系统的配置即可

  • 搭建vmware虚拟环境, 并进行克隆(在虚拟系统进行安装)。
    搭建环境访问此篇文章即可 》》

注意事项

注:跟着做完全没有问题,下面我会说一下安装时的注意事项

1. 编辑 /etc/hostname与/etc/hosts

注:这里编辑的两处文件 hostname 是编辑主机名称, hosts是编辑主机名称与ip地址的映射

2. 执行初始化命令

注:执行下方命令会出现如下错误,但是,,,可以继续往下部署,不会影像pulsar的集群安装使用
注:具体为什么会出现还需再进行研究,若发现解决方法,会在这里挂链接 》》

Unable to read additional data from server sessionid 0x0, likely server has closed socket
./pulsar initialize-cluster-metadata \
--cluster pulsar-cluster \
--zookeeper pulsarCluster3:2181 \
--configuration-store pulsarCluster3:2181 \
--web-service-url http://pulsarCluster3:8080,pulsarCluster4:8080,pulsarCluster5:8080 \
--web-service-url-tls https://pulsarCluster3:8443,pulsarCluster4:8443,pulsarCluster5:8443 \
--broker-service-url pulsar://pulsarCluster3:6650,pulsarCluster4:6650,pulsarCluster5:6650 \
--broker-service-url-tls pulsar+ssl://pulsarCluster3:6651,pulsarCluster4:6651,pulsarCluster5:6651

二、创建应用程序对消息的生产和消费进行测试(物理主机建立应用程序运行)

1. 物理主机启动应用发送消息时报错处理。

注:按照教程中集群部署后,物理主机建立应用启动程序会报错
在这里插入图片描述注:解决方法就是在hosts中进行ip地址映射
在这里插入图片描述

2. 程序的搭建及说明。

注:主类是这样的, 启用了pulsar注解和定时任务注解

package comp;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.pulsar.annotation.EnablePulsar;
import org.springframework.scheduling.annotation.EnableScheduling;

@SpringBootApplication
@EnablePulsar
@EnableScheduling
public class PulsarApplication {
	public static void main(String[] args) {
		SpringApplication.run(PulsarApplication.class, args);
	}
}

注:使用的application.yml是这样的,其中mongo可以不用

server:
  port: 8200
  servlet:
    context-path: /
spring:
  pulsar:
    client:
      service-url: pulsar://192.168.249.3:6650,192.168.249.4:6650,192.168.249.5:6650
3. 使用到的pom依赖

注:此次测试使用的springboot版本:3.2.2
注:此次测试使用的open jdk版本:17.0.9

<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>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>3.2.2</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <artifactId>pulsar</artifactId>
    <packaging>jar</packaging>

    <name>pulsar</name>
    <url>http://maven.apache.org</url>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-pulsar</artifactId>
        </dependency>
        <!--mq 消费-->
        <dependency>
            <groupId>io.github.majusko</groupId>
            <artifactId>pulsar-java-spring-boot-starter</artifactId>
            <version>1.1.2</version>
            <exclusions>
                <exclusion>
                    <groupId>org.apache.pulsar</groupId>
                    <artifactId>pulsar-client-original</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>2.0.32</version>
        </dependency>
    </dependencies>
</project>
4. springboot中pulsar配置
import jakarta.annotation.PostConstruct;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.pulsar.core.PulsarTemplate;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;

@Slf4j
@Component
public class PulsarComponent {

    private PulsarTemplate<byte[]> template;

    @Autowired
    private void setTemplate(PulsarTemplate<byte[]> template) {
        this.template = template;
    }

    /**
     * 根据topicName发送消息
     * @param topic
     * @param message
     */
    public void sendMessage(String topic, String message) {
        try {
            template.sendAsync(topic, message.getBytes("utf-8"));
        } catch (Exception e) {
            log.error("发送信息出错{}", e.getMessage());
            e.printStackTrace();
        }
    }

}

5. 接收消息

注:使用注解@PulsarListener

@Service
@Slf4j
public class ConsumeServiceImpl {
    @PulsarListener(
            subscriptionName = "hell",
            topics = "zf",
            subscriptionType = SubscriptionType.Shared,
            schemaType = SchemaType.STRING
    )
    public void saveOperation(String operationLogStr) {
        log.info(operationLogStr);
    }
}
6. 模拟发送消息

注:使用定时任务模拟发送消息,3s一次
注:生产内容 hell zf
注:topic为 zf

import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service;

@Service
@Slf4j
public class ProductServiceImpl {

    @Resource
    private PulsarComponent pulsarComponent;

    @Scheduled(cron = "0/3 * * * * ?")
    public void spell() {
        log.info("已发送");
        pulsarComponent.sendMessage("zf", "hell zf");
    }

}
7. 发送与接收消息打印输出

在这里插入图片描述

总结

  1. docker容器的部署效率会更高。
    若使用docker容器搭建效率应该会更高。后面会使用容器进行搭建发布出来。》》
    docker容器的官网使用docker compose插件方式部署,可以尝试一下 》》
  2. 错误问题继续排查。
    那个[错误](#err)虽然不影响使用, 但是挺纠结,在尝试使用docker部署时关注这一点,进行纠错, 并在这个文章里进行更新.
    pulsar集群安装的文章中提到了如何解决这个问题,但是不起作用
  3. pulsar的部署需要搭配的内容真不少。
    注:bookeeper,主要用于持久化存储等
    注:zookeeper,任务的协调,元数据存储
    注:broker,负责处理生产和消费的请求
  4. websocket与pulsar还可以进行搭配
    后期还会发布websocket与pulsar消息队列配合的技术文章 》》

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

HTML网页文档和DOM结构介绍

HTML网页文档和DOM结构介绍 HTML网页文档 HTML&#xff0c;全称为超文本标记语言&#xff08;Hypertext Markup Language&#xff09;&#xff0c;是用来描述并定义内容结构的标记语言&#xff0c;它是构建任何网页和网络应用的最基础的组成部分。HTML文档由一系列的元素构成…

《由浅入深学习SAP财务》:第2章 总账模块 - 2.2 组织结构

在SAP的FI模块&#xff0c;主要的组织结构有公司代码&#xff08;一定会用&#xff09;、公司&#xff08;只在做合并业务时用&#xff09;、业务范围&#xff08;可能使用&#xff09;、段&#xff08;较少使用&#xff09;、利润中心&#xff08;可能使用&#xff09;。 2.2…

二叉树|257.二叉树的所有路径

力扣题目链接 class Solution { private:void traversal(TreeNode* cur, vector<int>& path, vector<string>& result) {path.push_back(cur->val); // 中&#xff0c;中为什么写在这里&#xff0c;因为最后一个节点也要加入到path中 // 这才到了叶子节…

ThingsBoard初始化数据库Postgres+Cassandra

本章将介绍ThingsBoard初始化数据PostgresCassandra&#xff0c;两种数据库结合使用&#xff0c;以及源码的编译安装。本机环境&#xff1a;Centos7、Docker、Postgres、Cassandra 环境安装 开发环境要求&#xff1a; docker &#xff1b;Docker&#xff1b;Postgres:Cassandr…

为车主提供多路况安全保障!“北欧轮胎安全专家”熊牌轮胎迎来全新升级

德国马牌轮胎旗下明星品牌——Gislaved熊牌轮胎迎来全新升级。 自进入中国市场以来&#xff0c;熊牌轮胎凭借着坚韧安全、静音降噪等特点&#xff0c;收获无数好评。此次全新升级的熊牌轮胎&#xff0c;在品牌logo中加入了“北欧棕熊”的形象&#xff0c;并且对此前轮胎标签中的…

哨兵位、链表的链接

哨兵位&#xff1a; 通俗的话讲就是额外开辟一块空间&#xff0c;指向链表的头部。 合并两个有序链表 已解答 简单 相关标签 相关企业 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例 1&#xff1a; 输入&#…

PID算法原理分析及优化

今天为大家介绍一下经典控制算法之一的PID控制方法。PID控制方法从提出至今已有百余年历史&#xff0c;其由于结构简单、易于实现、鲁棒性好、可靠性高等特点&#xff0c;在机电、冶金、机械、化工等行业中应用广泛。 在大学期间&#xff0c;参加的智能汽车竞赛中就使用到了PI…

1. Java基础入门

1. Java基础入门 1.1 Java介绍(了解) 1.1.1 Java背景 Java是美国 sun 公司&#xff08;Stanford University Network&#xff09;在1995年推出的一门计算机高级编程语言。Java 之父&#xff1a;詹姆斯高斯林(James Gosling)。 2009年 sun公司被Oracle公司收购。Java公司图标…

工业网关的功能与作用进行解析-天拓四方

在工业4.0和智能制造的时代背景下&#xff0c;工业网关作为连接现场设备与云端平台的桥梁&#xff0c;正发挥着日益重要的作用。它不仅为工业设备的远程监控和管理提供了可能&#xff0c;还为企业实现数字化转型和智能化升级提供了有力支持。本文将对工业网关的功能与作用进行解…

#Linux(权限管理)

&#xff08;一&#xff09;发行版&#xff1a;Ubuntu16.04.7 &#xff08;二&#xff09;记录&#xff1a; &#xff08;1&#xff09; &#xff08;2&#xff09;-开头代表普通文件 划分为三组&#xff1a; rw- rw- r-- rw-: 文件拥有…

使用远程工具连接Mysql

&#xff08;若想要远程连接Mysql需要下面解决四个问题&#xff09; 1、目标地址 直接查询 2、端口号 3306 3、防火墙关闭 [rootlocalhost date]# systemctl stop firewalld.service 4、授权mysql数据库root用户权限&#xff08;因为mysql开始不允许其他IP访问&#xff0…

.NET开源、免费、强大的交互式绘图库

前言 今天大姚给大家分享一款.NET开源&#xff08;采用MIT许可证&#xff09;、免费、强大的交互式绘图库&#xff0c;该库能够轻松地实现大型数据集的交互式显示。使用几行代码即可快速创建折线图、柱状图、饼图、散点图等不同类型的图表&#xff1a;ScottPlot。 ScottPlot类…

【博特激光】使用视觉激光打标机有哪些优势

​ 使用视觉激光打标机具有以下优势&#xff1a; 1. 高精度定位&#xff1a;视觉激光打标机采用先进的视觉识别技术&#xff0c;能够在极短的时间内对物体进行精准的检测和定位&#xff0c;实现打标点的位置精度高达0.01mm以上。这使得它能够满足各种高精度打标需求&#xff0…

Mysql---DML

文章目录 前言一、pandas是什么&#xff1f;二、使用步骤 1.引入库2.读入数据总结 一.DML概述 DML&#xff08;Data Manipulation Language&#xff09;是MySQL中用于操作数据库中数据的语言。DML语句用于插入、更新和删除数据库中的记录&#xff0c;以及查询和修改数据库中的数…

RabbitMQ是如何保证高可用的?

RabbitMQ可以通过多种方式来实现高可用&#xff0c;以确保在硬件故障或其他不可预测的情况下&#xff0c;消息队列系统仍然能够正常运行。RabbitMQ有三种模式&#xff1a;单机模式、普通集群模式、镜像集群模式。 其中单机模式一般用于demo搭建&#xff0c;不适合在生产环境中…

搜索测试题题解(3月19号总结)

目录 1.Dungeon Master 2.Oil Deposits 3.Find a way 1.Dungeon Master Sample InputcopyOutputcopy 3 4 5 S.... .###. .##.. ###.###### ##### ##.## ##...##### ##### #.### ####E1 3 3 S## #E# ###0 0 0Escaped in 11 minute(s). Trapped! 这道题与普通的bfs模板题就是…

构建强大的API:Django中的REST框架探究与实践【第146篇—Django】

&#x1f47d;发现宝藏 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。【点击进入巨牛的人工智能学习网站】。 构建强大的API&#xff1a;Django中的REST框架探究与实践 在当今的Web开发中&#xff0c;构…

微服务cloud--抱团取暖吗 netflix很多停更了

抱团只会卷&#xff0c;卷卷也挺好的 DDD 高内聚 低耦合 服务间不要有业务交叉 通过接口调用 分解技术实现的复杂性&#xff0c;围绕业务概念构建领域模型&#xff1b;边界划分 业务中台&#xff1a; 数据中台&#xff1a; 技术中台&#xff1a; 核心组件 eureka&#x…

【C语言】动态内存管理及其常见错误

文章目录 1、前言&#xff1a;为什么要有动态内存分布2、三种动态内存的创建方式及其释放2.1 malloc2.2 calloc2.3 ralloc2.4 free 3、常⻅的动态内存的错误3.1 对NULL指针的解引用操作3.2 对动态开辟空间的越界访问3.3 对非动态开辟内存使用free释放3.4 使⽤free释放⼀块动态开…