blob: 8e33a638e852d69e424edde42dd568c1868dd66a [file]
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="generator" content="pdoc 12.3.0"/>
<title>pulsar API documentation</title>
<style>/*! * Bootstrap Reboot v5.0.0 (https://getbootstrap.com/) * Copyright 2011-2021 The Bootstrap Authors * Copyright 2011-2021 Twitter, Inc. * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md) */*,::after,::before{box-sizing:border-box}@media (prefers-reduced-motion:no-preference){:root{scroll-behavior:smooth}}body{margin:0;font-family:system-ui,-apple-system,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans","Liberation Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-size:1rem;font-weight:400;line-height:1.5;color:#212529;background-color:#fff;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}hr{margin:1rem 0;color:inherit;background-color:currentColor;border:0;opacity:.25}hr:not([size]){height:1px}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem;font-weight:500;line-height:1.2}h1{font-size:calc(1.375rem + 1.5vw)}@media (min-width:1200px){h1{font-size:2.5rem}}h2{font-size:calc(1.325rem + .9vw)}@media (min-width:1200px){h2{font-size:2rem}}h3{font-size:calc(1.3rem + .6vw)}@media (min-width:1200px){h3{font-size:1.75rem}}h4{font-size:calc(1.275rem + .3vw)}@media (min-width:1200px){h4{font-size:1.5rem}}h5{font-size:1.25rem}h6{font-size:1rem}p{margin-top:0;margin-bottom:1rem}abbr[data-bs-original-title],abbr[title]{-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}ol,ul{padding-left:2rem}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small{font-size:.875em}mark{padding:.2em;background-color:#fcf8e3}sub,sup{position:relative;font-size:.75em;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#0d6efd;text-decoration:underline}a:hover{color:#0a58ca}a:not([href]):not([class]),a:not([href]):not([class]):hover{color:inherit;text-decoration:none}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;font-size:1em;direction:ltr;unicode-bidi:bidi-override}pre{display:block;margin-top:0;margin-bottom:1rem;overflow:auto;font-size:.875em}pre code{font-size:inherit;color:inherit;word-break:normal}code{font-size:.875em;color:#d63384;word-wrap:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:.875em;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:1em;font-weight:700}figure{margin:0 0 1rem}img,svg{vertical-align:middle}table{caption-side:bottom;border-collapse:collapse}caption{padding-top:.5rem;padding-bottom:.5rem;color:#6c757d;text-align:left}th{text-align:inherit;text-align:-webkit-match-parent}tbody,td,tfoot,th,thead,tr{border-color:inherit;border-style:solid;border-width:0}label{display:inline-block}button{border-radius:0}button:focus:not(:focus-visible){outline:0}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}select:disabled{opacity:1}[list]::-webkit-calendar-picker-indicator{display:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}::-moz-focus-inner{padding:0;border-style:none}textarea{resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{float:left;width:100%;padding:0;margin-bottom:.5rem;font-size:calc(1.275rem + .3vw);line-height:inherit}@media (min-width:1200px){legend{font-size:1.5rem}}legend+*{clear:left}::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-fields-wrapper,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-text,::-webkit-datetime-edit-year-field{padding:0}::-webkit-inner-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:textfield}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-color-swatch-wrapper{padding:0}::file-selector-button{font:inherit}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}iframe{border:0}summary{display:list-item;cursor:pointer}progress{vertical-align:baseline}[hidden]{display:none!important}</style>
<style>/*! syntax-highlighting.css */pre{line-height:125%;}span.linenos{color:inherit; background-color:transparent; padding-left:5px; padding-right:20px;}.pdoc-code .hll{background-color:#ffffcc}.pdoc-code{background:#f8f8f8;}.pdoc-code .c{color:#3D7B7B; font-style:italic}.pdoc-code .err{border:1px solid #FF0000}.pdoc-code .k{color:#008000; font-weight:bold}.pdoc-code .o{color:#666666}.pdoc-code .ch{color:#3D7B7B; font-style:italic}.pdoc-code .cm{color:#3D7B7B; font-style:italic}.pdoc-code .cp{color:#9C6500}.pdoc-code .cpf{color:#3D7B7B; font-style:italic}.pdoc-code .c1{color:#3D7B7B; font-style:italic}.pdoc-code .cs{color:#3D7B7B; font-style:italic}.pdoc-code .gd{color:#A00000}.pdoc-code .ge{font-style:italic}.pdoc-code .gr{color:#E40000}.pdoc-code .gh{color:#000080; font-weight:bold}.pdoc-code .gi{color:#008400}.pdoc-code .go{color:#717171}.pdoc-code .gp{color:#000080; font-weight:bold}.pdoc-code .gs{font-weight:bold}.pdoc-code .gu{color:#800080; font-weight:bold}.pdoc-code .gt{color:#0044DD}.pdoc-code .kc{color:#008000; font-weight:bold}.pdoc-code .kd{color:#008000; font-weight:bold}.pdoc-code .kn{color:#008000; font-weight:bold}.pdoc-code .kp{color:#008000}.pdoc-code .kr{color:#008000; font-weight:bold}.pdoc-code .kt{color:#B00040}.pdoc-code .m{color:#666666}.pdoc-code .s{color:#BA2121}.pdoc-code .na{color:#687822}.pdoc-code .nb{color:#008000}.pdoc-code .nc{color:#0000FF; font-weight:bold}.pdoc-code .no{color:#880000}.pdoc-code .nd{color:#AA22FF}.pdoc-code .ni{color:#717171; font-weight:bold}.pdoc-code .ne{color:#CB3F38; font-weight:bold}.pdoc-code .nf{color:#0000FF}.pdoc-code .nl{color:#767600}.pdoc-code .nn{color:#0000FF; font-weight:bold}.pdoc-code .nt{color:#008000; font-weight:bold}.pdoc-code .nv{color:#19177C}.pdoc-code .ow{color:#AA22FF; font-weight:bold}.pdoc-code .w{color:#bbbbbb}.pdoc-code .mb{color:#666666}.pdoc-code .mf{color:#666666}.pdoc-code .mh{color:#666666}.pdoc-code .mi{color:#666666}.pdoc-code .mo{color:#666666}.pdoc-code .sa{color:#BA2121}.pdoc-code .sb{color:#BA2121}.pdoc-code .sc{color:#BA2121}.pdoc-code .dl{color:#BA2121}.pdoc-code .sd{color:#BA2121; font-style:italic}.pdoc-code .s2{color:#BA2121}.pdoc-code .se{color:#AA5D1F; font-weight:bold}.pdoc-code .sh{color:#BA2121}.pdoc-code .si{color:#A45A77; font-weight:bold}.pdoc-code .sx{color:#008000}.pdoc-code .sr{color:#A45A77}.pdoc-code .s1{color:#BA2121}.pdoc-code .ss{color:#19177C}.pdoc-code .bp{color:#008000}.pdoc-code .fm{color:#0000FF}.pdoc-code .vc{color:#19177C}.pdoc-code .vg{color:#19177C}.pdoc-code .vi{color:#19177C}.pdoc-code .vm{color:#19177C}.pdoc-code .il{color:#666666}</style>
<style>/*! theme.css */:root{--pdoc-background:#fff;}.pdoc{--text:#212529;--muted:#6c757d;--link:#3660a5;--link-hover:#1659c5;--code:#f8f8f8;--active:#fff598;--accent:#eee;--accent2:#c1c1c1;--nav-hover:rgba(255, 255, 255, 0.5);--name:#0066BB;--def:#008800;--annotation:#007020;}</style>
<style>/*! layout.css */html, body{width:100%;height:100%;}html, main{scroll-behavior:smooth;}body{background-color:var(--pdoc-background);}@media (max-width:769px){#navtoggle{cursor:pointer;position:absolute;width:50px;height:40px;top:1rem;right:1rem;border-color:var(--text);color:var(--text);display:flex;opacity:0.8;}#navtoggle:hover{opacity:1;}#togglestate + div{display:none;}#togglestate:checked + div{display:inherit;}main, header{padding:2rem 3vw;}header + main{margin-top:-3rem;}.git-button{display:none !important;}nav input[type="search"]{max-width:77%;}nav input[type="search"]:first-child{margin-top:-6px;}nav input[type="search"]:valid ~ *{display:none !important;}}@media (min-width:770px){:root{--sidebar-width:clamp(12.5rem, 28vw, 22rem);}nav{position:fixed;overflow:auto;height:100vh;width:var(--sidebar-width);}main, header{padding:3rem 2rem 3rem calc(var(--sidebar-width) + 3rem);width:calc(54rem + var(--sidebar-width));max-width:100%;}header + main{margin-top:-4rem;}#navtoggle{display:none;}}#togglestate{position:absolute;height:0;opacity:0;}nav.pdoc{--pad:clamp(0.5rem, 2vw, 1.75rem);--indent:1.5rem;background-color:var(--accent);border-right:1px solid var(--accent2);box-shadow:0 0 20px rgba(50, 50, 50, .2) inset;padding:0 0 0 var(--pad);overflow-wrap:anywhere;scrollbar-width:thin; scrollbar-color:var(--accent2) transparent }nav.pdoc::-webkit-scrollbar{width:.4rem; }nav.pdoc::-webkit-scrollbar-thumb{background-color:var(--accent2); }nav.pdoc > div{padding:var(--pad) 0;}nav.pdoc .module-list-button{display:inline-flex;align-items:center;color:var(--text);border-color:var(--muted);margin-bottom:1rem;}nav.pdoc .module-list-button:hover{border-color:var(--text);}nav.pdoc input[type=search]{display:block;outline-offset:0;width:calc(100% - var(--pad));}nav.pdoc .logo{max-width:calc(100% - var(--pad));max-height:35vh;display:block;margin:0 auto 1rem;transform:translate(calc(-.5 * var(--pad)), 0);}nav.pdoc ul{list-style:none;padding-left:0;}nav.pdoc > div > ul{margin-left:calc(0px - var(--pad));}nav.pdoc li a{padding:.2rem 0 .2rem calc(var(--pad) + var(--indent));}nav.pdoc > div > ul > li > a{padding-left:var(--pad);}nav.pdoc li{transition:all 100ms;}nav.pdoc li:hover{background-color:var(--nav-hover);}nav.pdoc a, nav.pdoc a:hover{color:var(--text);}nav.pdoc a{display:block;}nav.pdoc > h2:first-of-type{margin-top:1.5rem;}nav.pdoc .class:before{content:"class ";color:var(--muted);}nav.pdoc .function:after{content:"()";color:var(--muted);}nav.pdoc footer:before{content:"";display:block;width:calc(100% - var(--pad));border-top:solid var(--accent2) 1px;margin-top:1.5rem;padding-top:.5rem;}nav.pdoc footer{font-size:small;}</style>
<style>/*! content.css */.pdoc{color:var(--text);box-sizing:border-box;line-height:1.5;background:none;}.pdoc .pdoc-button{display:inline-block;border:solid black 1px;border-radius:2px;font-size:.75rem;padding:calc(0.5em - 1px) 1em;transition:100ms all;}.pdoc .pdoc-alert{padding:1rem 1rem 1rem calc(1.5rem + 24px);border:1px solid transparent;border-radius:.25rem;background-repeat:no-repeat;background-position:1rem center;margin-bottom:1rem;}.pdoc .pdoc-alert > *:last-child{margin-bottom:0;}.pdoc .pdoc-alert-note {color:#084298;background-color:#cfe2ff;border-color:#b6d4fe;background-image:url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20width%3D%2224%22%20height%3D%2224%22%20fill%3D%22%23084298%22%20viewBox%3D%220%200%2016%2016%22%3E%3Cpath%20d%3D%22M8%2016A8%208%200%201%200%208%200a8%208%200%200%200%200%2016zm.93-9.412-1%204.705c-.07.34.029.533.304.533.194%200%20.487-.07.686-.246l-.088.416c-.287.346-.92.598-1.465.598-.703%200-1.002-.422-.808-1.319l.738-3.468c.064-.293.006-.399-.287-.47l-.451-.081.082-.381%202.29-.287zM8%205.5a1%201%200%201%201%200-2%201%201%200%200%201%200%202z%22/%3E%3C/svg%3E");}.pdoc .pdoc-alert-warning{color:#664d03;background-color:#fff3cd;border-color:#ffecb5;background-image:url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20width%3D%2224%22%20height%3D%2224%22%20fill%3D%22%23664d03%22%20viewBox%3D%220%200%2016%2016%22%3E%3Cpath%20d%3D%22M8.982%201.566a1.13%201.13%200%200%200-1.96%200L.165%2013.233c-.457.778.091%201.767.98%201.767h13.713c.889%200%201.438-.99.98-1.767L8.982%201.566zM8%205c.535%200%20.954.462.9.995l-.35%203.507a.552.552%200%200%201-1.1%200L7.1%205.995A.905.905%200%200%201%208%205zm.002%206a1%201%200%201%201%200%202%201%201%200%200%201%200-2z%22/%3E%3C/svg%3E");}.pdoc .pdoc-alert-danger{color:#842029;background-color:#f8d7da;border-color:#f5c2c7;background-image:url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20width%3D%2224%22%20height%3D%2224%22%20fill%3D%22%23842029%22%20viewBox%3D%220%200%2016%2016%22%3E%3Cpath%20d%3D%22M5.52.359A.5.5%200%200%201%206%200h4a.5.5%200%200%201%20.474.658L8.694%206H12.5a.5.5%200%200%201%20.395.807l-7%209a.5.5%200%200%201-.873-.454L6.823%209.5H3.5a.5.5%200%200%201-.48-.641l2.5-8.5z%22/%3E%3C/svg%3E");}.pdoc .visually-hidden{position:absolute !important;width:1px !important;height:1px !important;padding:0 !important;margin:-1px !important;overflow:hidden !important;clip:rect(0, 0, 0, 0) !important;white-space:nowrap !important;border:0 !important;}.pdoc h1, .pdoc h2, .pdoc h3{font-weight:300;margin:.3em 0;padding:.2em 0;}.pdoc > section:not(.module-info) h1{font-size:1.5rem;font-weight:500;}.pdoc > section:not(.module-info) h2{font-size:1.4rem;font-weight:500;}.pdoc > section:not(.module-info) h3{font-size:1.3rem;font-weight:500;}.pdoc > section:not(.module-info) h4{font-size:1.2rem;}.pdoc > section:not(.module-info) h5{font-size:1.1rem;}.pdoc a{text-decoration:none;color:var(--link);}.pdoc a:hover{color:var(--link-hover);}.pdoc blockquote{margin-left:2rem;}.pdoc pre{border-top:1px solid var(--accent2);border-bottom:1px solid var(--accent2);margin-top:0;margin-bottom:1em;padding:.5rem 0 .5rem .5rem;overflow-x:auto;background-color:var(--code);}.pdoc code{color:var(--text);padding:.2em .4em;margin:0;font-size:85%;background-color:var(--code);border-radius:6px;}.pdoc a > code{color:inherit;}.pdoc pre > code{display:inline-block;font-size:inherit;background:none;border:none;padding:0;}.pdoc > section:not(.module-info){margin-bottom:1.5rem;}.pdoc .modulename{margin-top:0;font-weight:bold;}.pdoc .modulename a{color:var(--link);transition:100ms all;}.pdoc .git-button{float:right;border:solid var(--link) 1px;}.pdoc .git-button:hover{background-color:var(--link);color:var(--pdoc-background);}.view-source-toggle-state,.view-source-toggle-state ~ .pdoc-code{display:none;}.view-source-toggle-state:checked ~ .pdoc-code{display:block;}.view-source-button{display:inline-block;float:right;font-size:.75rem;line-height:1.5rem;color:var(--muted);padding:0 .4rem 0 1.3rem;cursor:pointer;text-indent:-2px;}.view-source-button > span{visibility:hidden;}.module-info .view-source-button{float:none;display:flex;justify-content:flex-end;margin:-1.2rem .4rem -.2rem 0;}.view-source-button::before{position:absolute;content:"View Source";display:list-item;list-style-type:disclosure-closed;}.view-source-toggle-state:checked ~ .attr .view-source-button::before,.view-source-toggle-state:checked ~ .view-source-button::before{list-style-type:disclosure-open;}.pdoc .docstring{margin-bottom:1.5rem;}.pdoc section:not(.module-info) .docstring{margin-left:clamp(0rem, 5vw - 2rem, 1rem);}.pdoc .docstring .pdoc-code{margin-left:1em;margin-right:1em;}.pdoc h1:target,.pdoc h2:target,.pdoc h3:target,.pdoc h4:target,.pdoc h5:target,.pdoc h6:target,.pdoc .pdoc-code > pre > span:target{background-color:var(--active);box-shadow:-1rem 0 0 0 var(--active);}.pdoc .pdoc-code > pre > span:target{display:block;}.pdoc div:target > .attr,.pdoc section:target > .attr,.pdoc dd:target > a{background-color:var(--active);}.pdoc *{scroll-margin:2rem;}.pdoc .pdoc-code .linenos{user-select:none;}.pdoc .attr:hover{filter:contrast(0.95);}.pdoc section, .pdoc .classattr{position:relative;}.pdoc .headerlink{--width:clamp(1rem, 3vw, 2rem);position:absolute;top:0;left:calc(0rem - var(--width));transition:all 100ms ease-in-out;opacity:0;}.pdoc .headerlink::before{content:"#";display:block;text-align:center;width:var(--width);height:2.3rem;line-height:2.3rem;font-size:1.5rem;}.pdoc .attr:hover ~ .headerlink,.pdoc *:target > .headerlink,.pdoc .headerlink:hover{opacity:1;}.pdoc .attr{display:block;margin:.5rem 0 .5rem;padding:.4rem .4rem .4rem 1rem;background-color:var(--accent);overflow-x:auto;}.pdoc .classattr{margin-left:2rem;}.pdoc .name{color:var(--name);font-weight:bold;}.pdoc .def{color:var(--def);font-weight:bold;}.pdoc .signature{background-color:transparent;}.pdoc .param, .pdoc .return-annotation{white-space:pre;}.pdoc .signature.multiline .param{display:block;}.pdoc .signature.condensed .param{display:inline-block;}.pdoc .annotation{color:var(--annotation);}.pdoc .inherited{margin-left:2rem;}.pdoc .inherited dt{font-weight:700;}.pdoc .inherited dt, .pdoc .inherited dd{display:inline;margin-left:0;margin-bottom:.5rem;}.pdoc .inherited dd:not(:last-child):after{content:", ";}.pdoc .inherited .class:before{content:"class ";}.pdoc .inherited .function a:after{content:"()";}.pdoc .search-result .docstring{overflow:auto;max-height:25vh;}.pdoc .search-result.focused > .attr{background-color:var(--active);}.pdoc .attribution{margin-top:2rem;display:block;opacity:0.5;transition:all 200ms;filter:grayscale(100%);}.pdoc .attribution:hover{opacity:1;filter:grayscale(0%);}.pdoc .attribution img{margin-left:5px;height:35px;vertical-align:middle;width:70px;transition:all 200ms;}.pdoc table{display:block;width:max-content;max-width:100%;overflow:auto;margin-bottom:1rem;}.pdoc table th{font-weight:600;}.pdoc table th, .pdoc table td{padding:6px 13px;border:1px solid var(--accent2);}</style>
<style>/*! custom.css */</style></head>
<body>
<nav class="pdoc">
<label id="navtoggle" for="togglestate" class="pdoc-button"><svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'><path stroke-linecap='round' stroke="currentColor" stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/></svg></label>
<input id="togglestate" type="checkbox" aria-hidden="true" tabindex="-1">
<div>
<input type="search" placeholder="Search..." role="searchbox" aria-label="search"
pattern=".+" required>
<h2>Contents</h2>
<ul>
<li><a href="#install-from-pypi">Install from PyPI</a></li>
<li><a href="#install-from-sources">Install from sources</a></li>
<li><a href="#examples">Examples</a></li>
</ul>
<h2>Submodules</h2>
<ul>
<li><a href="pulsar/exceptions.html">exceptions</a></li>
<li><a href="pulsar/functions.html">functions</a></li>
<li><a href="pulsar/schema.html">schema</a></li>
</ul>
<h2>API Documentation</h2>
<ul class="memberlist">
<li>
<a class="class" href="#MessageId">MessageId</a>
<ul class="memberlist">
<li>
<a class="function" href="#MessageId.__init__">MessageId</a>
</li>
<li>
<a class="variable" href="#MessageId.earliest">earliest</a>
</li>
<li>
<a class="function" href="#MessageId.ledger_id">ledger_id</a>
</li>
<li>
<a class="function" href="#MessageId.entry_id">entry_id</a>
</li>
<li>
<a class="function" href="#MessageId.batch_index">batch_index</a>
</li>
<li>
<a class="function" href="#MessageId.partition">partition</a>
</li>
<li>
<a class="function" href="#MessageId.serialize">serialize</a>
</li>
<li>
<a class="function" href="#MessageId.deserialize">deserialize</a>
</li>
</ul>
</li>
<li>
<a class="class" href="#Message">Message</a>
<ul class="memberlist">
<li>
<a class="function" href="#Message.__init__">Message</a>
</li>
<li>
<a class="function" href="#Message.data">data</a>
</li>
<li>
<a class="function" href="#Message.value">value</a>
</li>
<li>
<a class="function" href="#Message.properties">properties</a>
</li>
<li>
<a class="function" href="#Message.partition_key">partition_key</a>
</li>
<li>
<a class="function" href="#Message.publish_timestamp">publish_timestamp</a>
</li>
<li>
<a class="function" href="#Message.event_timestamp">event_timestamp</a>
</li>
<li>
<a class="function" href="#Message.message_id">message_id</a>
</li>
<li>
<a class="function" href="#Message.topic_name">topic_name</a>
</li>
<li>
<a class="function" href="#Message.redelivery_count">redelivery_count</a>
</li>
<li>
<a class="function" href="#Message.schema_version">schema_version</a>
</li>
</ul>
</li>
<li>
<a class="class" href="#MessageBatch">MessageBatch</a>
<ul class="memberlist">
<li>
<a class="function" href="#MessageBatch.__init__">MessageBatch</a>
</li>
<li>
<a class="function" href="#MessageBatch.with_message_id">with_message_id</a>
</li>
<li>
<a class="function" href="#MessageBatch.parse_from">parse_from</a>
</li>
</ul>
</li>
<li>
<a class="class" href="#Authentication">Authentication</a>
<ul class="memberlist">
<li>
<a class="function" href="#Authentication.__init__">Authentication</a>
</li>
</ul>
</li>
<li>
<a class="class" href="#AuthenticationTLS">AuthenticationTLS</a>
<ul class="memberlist">
<li>
<a class="function" href="#AuthenticationTLS.__init__">AuthenticationTLS</a>
</li>
</ul>
</li>
<li>
<a class="class" href="#AuthenticationToken">AuthenticationToken</a>
<ul class="memberlist">
<li>
<a class="function" href="#AuthenticationToken.__init__">AuthenticationToken</a>
</li>
</ul>
</li>
<li>
<a class="class" href="#AuthenticationAthenz">AuthenticationAthenz</a>
<ul class="memberlist">
<li>
<a class="function" href="#AuthenticationAthenz.__init__">AuthenticationAthenz</a>
</li>
</ul>
</li>
<li>
<a class="class" href="#AuthenticationOauth2">AuthenticationOauth2</a>
<ul class="memberlist">
<li>
<a class="function" href="#AuthenticationOauth2.__init__">AuthenticationOauth2</a>
</li>
</ul>
</li>
<li>
<a class="class" href="#Client">Client</a>
<ul class="memberlist">
<li>
<a class="function" href="#Client.__init__">Client</a>
</li>
<li>
<a class="function" href="#Client.create_producer">create_producer</a>
</li>
<li>
<a class="function" href="#Client.subscribe">subscribe</a>
</li>
<li>
<a class="function" href="#Client.create_reader">create_reader</a>
</li>
<li>
<a class="function" href="#Client.get_topic_partitions">get_topic_partitions</a>
</li>
<li>
<a class="function" href="#Client.shutdown">shutdown</a>
</li>
<li>
<a class="function" href="#Client.close">close</a>
</li>
</ul>
</li>
<li>
<a class="class" href="#Producer">Producer</a>
<ul class="memberlist">
<li>
<a class="function" href="#Producer.__init__">Producer</a>
</li>
<li>
<a class="function" href="#Producer.topic">topic</a>
</li>
<li>
<a class="function" href="#Producer.producer_name">producer_name</a>
</li>
<li>
<a class="function" href="#Producer.last_sequence_id">last_sequence_id</a>
</li>
<li>
<a class="function" href="#Producer.send">send</a>
</li>
<li>
<a class="function" href="#Producer.send_async">send_async</a>
</li>
<li>
<a class="function" href="#Producer.flush">flush</a>
</li>
<li>
<a class="function" href="#Producer.close">close</a>
</li>
</ul>
</li>
<li>
<a class="class" href="#Consumer">Consumer</a>
<ul class="memberlist">
<li>
<a class="function" href="#Consumer.__init__">Consumer</a>
</li>
<li>
<a class="function" href="#Consumer.topic">topic</a>
</li>
<li>
<a class="function" href="#Consumer.subscription_name">subscription_name</a>
</li>
<li>
<a class="function" href="#Consumer.unsubscribe">unsubscribe</a>
</li>
<li>
<a class="function" href="#Consumer.receive">receive</a>
</li>
<li>
<a class="function" href="#Consumer.acknowledge">acknowledge</a>
</li>
<li>
<a class="function" href="#Consumer.acknowledge_cumulative">acknowledge_cumulative</a>
</li>
<li>
<a class="function" href="#Consumer.negative_acknowledge">negative_acknowledge</a>
</li>
<li>
<a class="function" href="#Consumer.pause_message_listener">pause_message_listener</a>
</li>
<li>
<a class="function" href="#Consumer.resume_message_listener">resume_message_listener</a>
</li>
<li>
<a class="function" href="#Consumer.redeliver_unacknowledged_messages">redeliver_unacknowledged_messages</a>
</li>
<li>
<a class="function" href="#Consumer.seek">seek</a>
</li>
<li>
<a class="function" href="#Consumer.close">close</a>
</li>
</ul>
</li>
<li>
<a class="class" href="#Reader">Reader</a>
<ul class="memberlist">
<li>
<a class="function" href="#Reader.__init__">Reader</a>
</li>
<li>
<a class="function" href="#Reader.topic">topic</a>
</li>
<li>
<a class="function" href="#Reader.read_next">read_next</a>
</li>
<li>
<a class="function" href="#Reader.has_message_available">has_message_available</a>
</li>
<li>
<a class="function" href="#Reader.seek">seek</a>
</li>
<li>
<a class="function" href="#Reader.close">close</a>
</li>
</ul>
</li>
<li>
<a class="class" href="#CryptoKeyReader">CryptoKeyReader</a>
<ul class="memberlist">
<li>
<a class="function" href="#CryptoKeyReader.__init__">CryptoKeyReader</a>
</li>
</ul>
</li>
</ul>
<a class="attribution" title="pdoc: Python API documentation generator" href="https://pdoc.dev" target="_blank">
built with <span class="visually-hidden">pdoc</span><img
alt="pdoc logo"
src="data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20role%3D%22img%22%20aria-label%3D%22pdoc%20logo%22%20width%3D%22300%22%20height%3D%22150%22%20viewBox%3D%22-1%200%2060%2030%22%3E%3Ctitle%3Epdoc%3C/title%3E%3Cpath%20d%3D%22M29.621%2021.293c-.011-.273-.214-.475-.511-.481a.5.5%200%200%200-.489.503l-.044%201.393c-.097.551-.695%201.215-1.566%201.704-.577.428-1.306.486-2.193.182-1.426-.617-2.467-1.654-3.304-2.487l-.173-.172a3.43%203.43%200%200%200-.365-.306.49.49%200%200%200-.286-.196c-1.718-1.06-4.931-1.47-7.353.191l-.219.15c-1.707%201.187-3.413%202.131-4.328%201.03-.02-.027-.49-.685-.141-1.763.233-.721.546-2.408.772-4.076.042-.09.067-.187.046-.288.166-1.347.277-2.625.241-3.351%201.378-1.008%202.271-2.586%202.271-4.362%200-.976-.272-1.935-.788-2.774-.057-.094-.122-.18-.184-.268.033-.167.052-.339.052-.516%200-1.477-1.202-2.679-2.679-2.679-.791%200-1.496.352-1.987.9a6.3%206.3%200%200%200-1.001.029c-.492-.564-1.207-.929-2.012-.929-1.477%200-2.679%201.202-2.679%202.679A2.65%202.65%200%200%200%20.97%206.554c-.383.747-.595%201.572-.595%202.41%200%202.311%201.507%204.29%203.635%205.107-.037.699-.147%202.27-.423%203.294l-.137.461c-.622%202.042-2.515%208.257%201.727%2010.643%201.614.908%203.06%201.248%204.317%201.248%202.665%200%204.492-1.524%205.322-2.401%201.476-1.559%202.886-1.854%206.491.82%201.877%201.393%203.514%201.753%204.861%201.068%202.223-1.713%202.811-3.867%203.399-6.374.077-.846.056-1.469.054-1.537zm-4.835%204.313c-.054.305-.156.586-.242.629-.034-.007-.131-.022-.307-.157-.145-.111-.314-.478-.456-.908.221.121.432.25.675.355.115.039.219.051.33.081zm-2.251-1.238c-.05.33-.158.648-.252.694-.022.001-.125-.018-.307-.157-.217-.166-.488-.906-.639-1.573.358.344.754.693%201.198%201.036zm-3.887-2.337c-.006-.116-.018-.231-.041-.342.635.145%201.189.368%201.599.625.097.231.166.481.174.642-.03.049-.055.101-.067.158-.046.013-.128.026-.298.004-.278-.037-.901-.57-1.367-1.087zm-1.127-.497c.116.306.176.625.12.71-.019.014-.117.045-.345.016-.206-.027-.604-.332-.986-.695.41-.051.816-.056%201.211-.031zm-4.535%201.535c.209.22.379.47.358.598-.006.041-.088.138-.351.234-.144.055-.539-.063-.979-.259a11.66%2011.66%200%200%200%20.972-.573zm.983-.664c.359-.237.738-.418%201.126-.554.25.237.479.548.457.694-.006.042-.087.138-.351.235-.174.064-.694-.105-1.232-.375zm-3.381%201.794c-.022.145-.061.29-.149.401-.133.166-.358.248-.69.251h-.002c-.133%200-.306-.26-.45-.621.417.091.854.07%201.291-.031zm-2.066-8.077a4.78%204.78%200%200%201-.775-.584c.172-.115.505-.254.88-.378l-.105.962zm-.331%202.302a10.32%2010.32%200%200%201-.828-.502c.202-.143.576-.328.984-.49l-.156.992zm-.45%202.157l-.701-.403c.214-.115.536-.249.891-.376a11.57%2011.57%200%200%201-.19.779zm-.181%201.716c.064.398.194.702.298.893-.194-.051-.435-.162-.736-.398.061-.119.224-.3.438-.495zM8.87%204.141c0%20.152-.123.276-.276.276s-.275-.124-.275-.276.123-.276.276-.276.275.124.275.276zm-.735-.389a1.15%201.15%200%200%200-.314.783%201.16%201.16%200%200%200%201.162%201.162c.457%200%20.842-.27%201.032-.653.026.117.042.238.042.362a1.68%201.68%200%200%201-1.679%201.679%201.68%201.68%200%200%201-1.679-1.679c0-.843.626-1.535%201.436-1.654zM5.059%205.406A1.68%201.68%200%200%201%203.38%207.085a1.68%201.68%200%200%201-1.679-1.679c0-.037.009-.072.011-.109.21.3.541.508.935.508a1.16%201.16%200%200%200%201.162-1.162%201.14%201.14%200%200%200-.474-.912c.015%200%20.03-.005.045-.005.926.001%201.679.754%201.679%201.68zM3.198%204.141c0%20.152-.123.276-.276.276s-.275-.124-.275-.276.123-.276.276-.276.275.124.275.276zM1.375%208.964c0-.52.103-1.035.288-1.52.466.394%201.06.64%201.717.64%201.144%200%202.116-.725%202.499-1.738.383%201.012%201.355%201.738%202.499%201.738.867%200%201.631-.421%202.121-1.062.307.605.478%201.267.478%201.942%200%202.486-2.153%204.51-4.801%204.51s-4.801-2.023-4.801-4.51zm24.342%2019.349c-.985.498-2.267.168-3.813-.979-3.073-2.281-5.453-3.199-7.813-.705-1.315%201.391-4.163%203.365-8.423.97-3.174-1.786-2.239-6.266-1.261-9.479l.146-.492c.276-1.02.395-2.457.444-3.268a6.11%206.11%200%200%200%201.18.115%206.01%206.01%200%200%200%202.536-.562l-.006.175c-.802.215-1.848.612-2.021%201.25-.079.295.021.601.274.837.219.203.415.364.598.501-.667.304-1.243.698-1.311%201.179-.02.144-.022.507.393.787.213.144.395.26.564.365-1.285.521-1.361.96-1.381%201.126-.018.142-.011.496.427.746l.854.489c-.473.389-.971.914-.999%201.429-.018.278.095.532.316.713.675.556%201.231.721%201.653.721.059%200%20.104-.014.158-.02.207.707.641%201.64%201.513%201.64h.013c.8-.008%201.236-.345%201.462-.626.173-.216.268-.457.325-.692.424.195.93.374%201.372.374.151%200%20.294-.021.423-.068.732-.27.944-.704.993-1.021.009-.061.003-.119.002-.179.266.086.538.147.789.147.15%200%20.294-.021.423-.069.542-.2.797-.489.914-.754.237.147.478.258.704.288.106.014.205.021.296.021.356%200%20.595-.101.767-.229.438.435%201.094.992%201.656%201.067.106.014.205.021.296.021a1.56%201.56%200%200%200%20.323-.035c.17.575.453%201.289.866%201.605.358.273.665.362.914.362a.99.99%200%200%200%20.421-.093%201.03%201.03%200%200%200%20.245-.164c.168.428.39.846.68%201.068.358.273.665.362.913.362a.99.99%200%200%200%20.421-.093c.317-.148.512-.448.639-.762.251.157.495.257.726.257.127%200%20.25-.024.37-.071.427-.17.706-.617.841-1.314.022-.015.047-.022.068-.038.067-.051.133-.104.196-.159-.443%201.486-1.107%202.761-2.086%203.257zM8.66%209.925a.5.5%200%201%200-1%200c0%20.653-.818%201.205-1.787%201.205s-1.787-.552-1.787-1.205a.5.5%200%201%200-1%200c0%201.216%201.25%202.205%202.787%202.205s2.787-.989%202.787-2.205zm4.4%2015.965l-.208.097c-2.661%201.258-4.708%201.436-6.086.527-1.542-1.017-1.88-3.19-1.844-4.198a.4.4%200%200%200-.385-.414c-.242-.029-.406.164-.414.385-.046%201.249.367%203.686%202.202%204.896.708.467%201.547.7%202.51.7%201.248%200%202.706-.392%204.362-1.174l.185-.086a.4.4%200%200%200%20.205-.527c-.089-.204-.326-.291-.527-.206zM9.547%202.292c.093.077.205.114.317.114a.5.5%200%200%200%20.318-.886L8.817.397a.5.5%200%200%200-.703.068.5.5%200%200%200%20.069.703l1.364%201.124zm-7.661-.065c.086%200%20.173-.022.253-.068l1.523-.893a.5.5%200%200%200-.506-.863l-1.523.892a.5.5%200%200%200-.179.685c.094.158.261.247.432.247z%22%20transform%3D%22matrix%28-1%200%200%201%2058%200%29%22%20fill%3D%22%233bb300%22/%3E%3Cpath%20d%3D%22M.3%2021.86V10.18q0-.46.02-.68.04-.22.18-.5.28-.54%201.34-.54%201.06%200%201.42.28.38.26.44.78.76-1.04%202.38-1.04%201.64%200%203.1%201.54%201.46%201.54%201.46%203.58%200%202.04-1.46%203.58-1.44%201.54-3.08%201.54-1.64%200-2.38-.92v4.04q0%20.46-.04.68-.02.22-.18.5-.14.3-.5.42-.36.12-.98.12-.62%200-1-.12-.36-.12-.52-.4-.14-.28-.18-.5-.02-.22-.02-.68zm3.96-9.42q-.46.54-.46%201.18%200%20.64.46%201.18.48.52%201.2.52.74%200%201.24-.52.52-.52.52-1.18%200-.66-.48-1.18-.48-.54-1.26-.54-.76%200-1.22.54zm14.741-8.36q.16-.3.54-.42.38-.12%201-.12.64%200%201.02.12.38.12.52.42.16.3.18.54.04.22.04.68v11.94q0%20.46-.04.7-.02.22-.18.5-.3.54-1.7.54-1.38%200-1.54-.98-.84.96-2.34.96-1.8%200-3.28-1.56-1.48-1.58-1.48-3.66%200-2.1%201.48-3.68%201.5-1.58%203.28-1.58%201.48%200%202.3%201v-4.2q0-.46.02-.68.04-.24.18-.52zm-3.24%2010.86q.52.54%201.26.54.74%200%201.22-.54.5-.54.5-1.18%200-.66-.48-1.22-.46-.56-1.26-.56-.8%200-1.28.56-.48.54-.48%201.2%200%20.66.52%201.2zm7.833-1.2q0-2.4%201.68-3.96%201.68-1.56%203.84-1.56%202.16%200%203.82%201.56%201.66%201.54%201.66%203.94%200%201.66-.86%202.96-.86%201.28-2.1%201.9-1.22.6-2.54.6-1.32%200-2.56-.64-1.24-.66-2.1-1.92-.84-1.28-.84-2.88zm4.18%201.44q.64.48%201.3.48.66%200%201.32-.5.66-.5.66-1.48%200-.98-.62-1.46-.62-.48-1.34-.48-.72%200-1.34.5-.62.5-.62%201.48%200%20.96.64%201.46zm11.412-1.44q0%20.84.56%201.32.56.46%201.18.46.64%200%201.18-.36.56-.38.9-.38.6%200%201.46%201.06.46.58.46%201.04%200%20.76-1.1%201.42-1.14.8-2.8.8-1.86%200-3.58-1.34-.82-.64-1.34-1.7-.52-1.08-.52-2.36%200-1.3.52-2.34.52-1.06%201.34-1.7%201.66-1.32%203.54-1.32.76%200%201.48.22.72.2%201.06.4l.32.2q.36.24.56.38.52.4.52.92%200%20.5-.42%201.14-.72%201.1-1.38%201.1-.38%200-1.08-.44-.36-.34-1.04-.34-.66%200-1.24.48-.58.48-.58%201.34z%22%20fill%3D%22green%22/%3E%3C/svg%3E"/>
</a>
</div>
</nav>
<main class="pdoc">
<section class="module-info">
<h1 class="modulename">
pulsar </h1>
<div class="docstring"><p>The Pulsar Python client library is based on the existing C++ client library.
All the same features are exposed through the Python interface.</p>
<p>Currently, the supported Python versions are 2.7, 3.5, 3.6, 3.7 and 3.8.</p>
<h2 id="install-from-pypi">Install from PyPI</h2>
<p>Download Python wheel binary files for MacOS and Linux
directly from the PyPI archive.</p>
<pre><code>#!shell
$ sudo pip install pulsar-client
</code></pre>
<h2 id="install-from-sources">Install from sources</h2>
<p>Follow the instructions to compile the Pulsar C++ client library. This method
will also build the Python binding for the library.</p>
<p>To install the Python bindings:</p>
<pre><code>#!shell
$ cd pulsar-client-cpp/python
$ sudo python setup.py install
</code></pre>
<h2 id="examples">Examples</h2>
<h3 id="producerpulsarproducer-example"><a href="#pulsar.Producer">Producer</a> example</h3>
<pre><code>#!python
import pulsar
client = <a href="#Client">pulsar.Client</a>('pulsar://localhost:6650')
producer = client.create_producer('my-topic')
for i in range(10):
producer.send(('Hello-%d' % i).encode('utf-8'))
client.close()
</code></pre>
<h4 id="consumerpulsarconsumer-example"><a href="#pulsar.Consumer">Consumer</a> Example</h4>
<pre><code>#!python
import pulsar
client = <a href="#Client">pulsar.Client</a>('pulsar://localhost:6650')
consumer = client.subscribe('my-topic', 'my-subscription')
while True:
msg = consumer.receive()
try:
print("Received message '%s' id='%s'", msg.data().decode('utf-8'), msg.message_id())
consumer.acknowledge(msg)
except:
consumer.negative_acknowledge(msg)
client.close()
</code></pre>
<h3 id="async-producerpulsarproducersend_async-example"><a href="#pulsar.<a href="#Producer.send_async">Producer.send_async</a>">Async producer</a> example</h3>
<pre><code>#!python
import pulsar
client = <a href="#Client">pulsar.Client</a>('pulsar://localhost:6650')
producer = client.create_producer(
'my-topic',
block_if_queue_full=True,
batching_enabled=True,
batching_max_publish_delay_ms=10
)
def send_callback(res, msg_id):
print('Message published res=%s', res)
while True:
producer.send_async(('Hello-%d' % i).encode('utf-8'), send_callback)
client.close()
</code></pre>
</div>
<input id="mod-pulsar-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<label class="view-source-button" for="mod-pulsar-view-source"><span>View Source</span></label>
<div class="pdoc-code codehilite"><pre><span></span><span id="L-1"><a href="#L-1"><span class="linenos"> 1</span></a><span class="c1">#</span>
</span><span id="L-2"><a href="#L-2"><span class="linenos"> 2</span></a><span class="c1"># Licensed to the Apache Software Foundation (ASF) under one</span>
</span><span id="L-3"><a href="#L-3"><span class="linenos"> 3</span></a><span class="c1"># or more contributor license agreements. See the NOTICE file</span>
</span><span id="L-4"><a href="#L-4"><span class="linenos"> 4</span></a><span class="c1"># distributed with this work for additional information</span>
</span><span id="L-5"><a href="#L-5"><span class="linenos"> 5</span></a><span class="c1"># regarding copyright ownership. The ASF licenses this file</span>
</span><span id="L-6"><a href="#L-6"><span class="linenos"> 6</span></a><span class="c1"># to you under the Apache License, Version 2.0 (the</span>
</span><span id="L-7"><a href="#L-7"><span class="linenos"> 7</span></a><span class="c1"># &quot;License&quot;); you may not use this file except in compliance</span>
</span><span id="L-8"><a href="#L-8"><span class="linenos"> 8</span></a><span class="c1"># with the License. You may obtain a copy of the License at</span>
</span><span id="L-9"><a href="#L-9"><span class="linenos"> 9</span></a><span class="c1">#</span>
</span><span id="L-10"><a href="#L-10"><span class="linenos"> 10</span></a><span class="c1"># http://www.apache.org/licenses/LICENSE-2.0</span>
</span><span id="L-11"><a href="#L-11"><span class="linenos"> 11</span></a><span class="c1">#</span>
</span><span id="L-12"><a href="#L-12"><span class="linenos"> 12</span></a><span class="c1"># Unless required by applicable law or agreed to in writing,</span>
</span><span id="L-13"><a href="#L-13"><span class="linenos"> 13</span></a><span class="c1"># software distributed under the License is distributed on an</span>
</span><span id="L-14"><a href="#L-14"><span class="linenos"> 14</span></a><span class="c1"># &quot;AS IS&quot; BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY</span>
</span><span id="L-15"><a href="#L-15"><span class="linenos"> 15</span></a><span class="c1"># KIND, either express or implied. See the License for the</span>
</span><span id="L-16"><a href="#L-16"><span class="linenos"> 16</span></a><span class="c1"># specific language governing permissions and limitations</span>
</span><span id="L-17"><a href="#L-17"><span class="linenos"> 17</span></a><span class="c1"># under the License.</span>
</span><span id="L-18"><a href="#L-18"><span class="linenos"> 18</span></a><span class="c1">#</span>
</span><span id="L-19"><a href="#L-19"><span class="linenos"> 19</span></a>
</span><span id="L-20"><a href="#L-20"><span class="linenos"> 20</span></a><span class="sd">&quot;&quot;&quot;</span>
</span><span id="L-21"><a href="#L-21"><span class="linenos"> 21</span></a><span class="sd">The Pulsar Python client library is based on the existing C++ client library.</span>
</span><span id="L-22"><a href="#L-22"><span class="linenos"> 22</span></a><span class="sd">All the same features are exposed through the Python interface.</span>
</span><span id="L-23"><a href="#L-23"><span class="linenos"> 23</span></a>
</span><span id="L-24"><a href="#L-24"><span class="linenos"> 24</span></a><span class="sd">Currently, the supported Python versions are 2.7, 3.5, 3.6, 3.7 and 3.8.</span>
</span><span id="L-25"><a href="#L-25"><span class="linenos"> 25</span></a>
</span><span id="L-26"><a href="#L-26"><span class="linenos"> 26</span></a><span class="sd">## Install from PyPI</span>
</span><span id="L-27"><a href="#L-27"><span class="linenos"> 27</span></a>
</span><span id="L-28"><a href="#L-28"><span class="linenos"> 28</span></a><span class="sd">Download Python wheel binary files for MacOS and Linux</span>
</span><span id="L-29"><a href="#L-29"><span class="linenos"> 29</span></a><span class="sd">directly from the PyPI archive.</span>
</span><span id="L-30"><a href="#L-30"><span class="linenos"> 30</span></a>
</span><span id="L-31"><a href="#L-31"><span class="linenos"> 31</span></a><span class="sd"> #!shell</span>
</span><span id="L-32"><a href="#L-32"><span class="linenos"> 32</span></a><span class="sd"> $ sudo pip install pulsar-client</span>
</span><span id="L-33"><a href="#L-33"><span class="linenos"> 33</span></a>
</span><span id="L-34"><a href="#L-34"><span class="linenos"> 34</span></a><span class="sd">## Install from sources</span>
</span><span id="L-35"><a href="#L-35"><span class="linenos"> 35</span></a>
</span><span id="L-36"><a href="#L-36"><span class="linenos"> 36</span></a><span class="sd">Follow the instructions to compile the Pulsar C++ client library. This method</span>
</span><span id="L-37"><a href="#L-37"><span class="linenos"> 37</span></a><span class="sd">will also build the Python binding for the library.</span>
</span><span id="L-38"><a href="#L-38"><span class="linenos"> 38</span></a>
</span><span id="L-39"><a href="#L-39"><span class="linenos"> 39</span></a><span class="sd">To install the Python bindings:</span>
</span><span id="L-40"><a href="#L-40"><span class="linenos"> 40</span></a>
</span><span id="L-41"><a href="#L-41"><span class="linenos"> 41</span></a><span class="sd"> #!shell</span>
</span><span id="L-42"><a href="#L-42"><span class="linenos"> 42</span></a><span class="sd"> $ cd pulsar-client-cpp/python</span>
</span><span id="L-43"><a href="#L-43"><span class="linenos"> 43</span></a><span class="sd"> $ sudo python setup.py install</span>
</span><span id="L-44"><a href="#L-44"><span class="linenos"> 44</span></a>
</span><span id="L-45"><a href="#L-45"><span class="linenos"> 45</span></a><span class="sd">## Examples</span>
</span><span id="L-46"><a href="#L-46"><span class="linenos"> 46</span></a>
</span><span id="L-47"><a href="#L-47"><span class="linenos"> 47</span></a><span class="sd">### [Producer](#pulsar.Producer) example</span>
</span><span id="L-48"><a href="#L-48"><span class="linenos"> 48</span></a>
</span><span id="L-49"><a href="#L-49"><span class="linenos"> 49</span></a><span class="sd"> #!python</span>
</span><span id="L-50"><a href="#L-50"><span class="linenos"> 50</span></a><span class="sd"> import pulsar</span>
</span><span id="L-51"><a href="#L-51"><span class="linenos"> 51</span></a>
</span><span id="L-52"><a href="#L-52"><span class="linenos"> 52</span></a><span class="sd"> client = pulsar.Client(&#39;pulsar://localhost:6650&#39;)</span>
</span><span id="L-53"><a href="#L-53"><span class="linenos"> 53</span></a>
</span><span id="L-54"><a href="#L-54"><span class="linenos"> 54</span></a><span class="sd"> producer = client.create_producer(&#39;my-topic&#39;)</span>
</span><span id="L-55"><a href="#L-55"><span class="linenos"> 55</span></a>
</span><span id="L-56"><a href="#L-56"><span class="linenos"> 56</span></a><span class="sd"> for i in range(10):</span>
</span><span id="L-57"><a href="#L-57"><span class="linenos"> 57</span></a><span class="sd"> producer.send((&#39;Hello-%d&#39; % i).encode(&#39;utf-8&#39;))</span>
</span><span id="L-58"><a href="#L-58"><span class="linenos"> 58</span></a>
</span><span id="L-59"><a href="#L-59"><span class="linenos"> 59</span></a><span class="sd"> client.close()</span>
</span><span id="L-60"><a href="#L-60"><span class="linenos"> 60</span></a>
</span><span id="L-61"><a href="#L-61"><span class="linenos"> 61</span></a><span class="sd">#### [Consumer](#pulsar.Consumer) Example</span>
</span><span id="L-62"><a href="#L-62"><span class="linenos"> 62</span></a>
</span><span id="L-63"><a href="#L-63"><span class="linenos"> 63</span></a><span class="sd"> #!python</span>
</span><span id="L-64"><a href="#L-64"><span class="linenos"> 64</span></a><span class="sd"> import pulsar</span>
</span><span id="L-65"><a href="#L-65"><span class="linenos"> 65</span></a>
</span><span id="L-66"><a href="#L-66"><span class="linenos"> 66</span></a><span class="sd"> client = pulsar.Client(&#39;pulsar://localhost:6650&#39;)</span>
</span><span id="L-67"><a href="#L-67"><span class="linenos"> 67</span></a><span class="sd"> consumer = client.subscribe(&#39;my-topic&#39;, &#39;my-subscription&#39;)</span>
</span><span id="L-68"><a href="#L-68"><span class="linenos"> 68</span></a>
</span><span id="L-69"><a href="#L-69"><span class="linenos"> 69</span></a><span class="sd"> while True:</span>
</span><span id="L-70"><a href="#L-70"><span class="linenos"> 70</span></a><span class="sd"> msg = consumer.receive()</span>
</span><span id="L-71"><a href="#L-71"><span class="linenos"> 71</span></a><span class="sd"> try:</span>
</span><span id="L-72"><a href="#L-72"><span class="linenos"> 72</span></a><span class="sd"> print(&quot;Received message &#39;%s&#39; id=&#39;%s&#39;&quot;, msg.data().decode(&#39;utf-8&#39;), msg.message_id())</span>
</span><span id="L-73"><a href="#L-73"><span class="linenos"> 73</span></a><span class="sd"> consumer.acknowledge(msg)</span>
</span><span id="L-74"><a href="#L-74"><span class="linenos"> 74</span></a><span class="sd"> except:</span>
</span><span id="L-75"><a href="#L-75"><span class="linenos"> 75</span></a><span class="sd"> consumer.negative_acknowledge(msg)</span>
</span><span id="L-76"><a href="#L-76"><span class="linenos"> 76</span></a>
</span><span id="L-77"><a href="#L-77"><span class="linenos"> 77</span></a><span class="sd"> client.close()</span>
</span><span id="L-78"><a href="#L-78"><span class="linenos"> 78</span></a>
</span><span id="L-79"><a href="#L-79"><span class="linenos"> 79</span></a><span class="sd">### [Async producer](#pulsar.Producer.send_async) example</span>
</span><span id="L-80"><a href="#L-80"><span class="linenos"> 80</span></a>
</span><span id="L-81"><a href="#L-81"><span class="linenos"> 81</span></a><span class="sd"> #!python</span>
</span><span id="L-82"><a href="#L-82"><span class="linenos"> 82</span></a><span class="sd"> import pulsar</span>
</span><span id="L-83"><a href="#L-83"><span class="linenos"> 83</span></a>
</span><span id="L-84"><a href="#L-84"><span class="linenos"> 84</span></a><span class="sd"> client = pulsar.Client(&#39;pulsar://localhost:6650&#39;)</span>
</span><span id="L-85"><a href="#L-85"><span class="linenos"> 85</span></a>
</span><span id="L-86"><a href="#L-86"><span class="linenos"> 86</span></a><span class="sd"> producer = client.create_producer(</span>
</span><span id="L-87"><a href="#L-87"><span class="linenos"> 87</span></a><span class="sd"> &#39;my-topic&#39;,</span>
</span><span id="L-88"><a href="#L-88"><span class="linenos"> 88</span></a><span class="sd"> block_if_queue_full=True,</span>
</span><span id="L-89"><a href="#L-89"><span class="linenos"> 89</span></a><span class="sd"> batching_enabled=True,</span>
</span><span id="L-90"><a href="#L-90"><span class="linenos"> 90</span></a><span class="sd"> batching_max_publish_delay_ms=10</span>
</span><span id="L-91"><a href="#L-91"><span class="linenos"> 91</span></a><span class="sd"> )</span>
</span><span id="L-92"><a href="#L-92"><span class="linenos"> 92</span></a>
</span><span id="L-93"><a href="#L-93"><span class="linenos"> 93</span></a><span class="sd"> def send_callback(res, msg_id):</span>
</span><span id="L-94"><a href="#L-94"><span class="linenos"> 94</span></a><span class="sd"> print(&#39;Message published res=%s&#39;, res)</span>
</span><span id="L-95"><a href="#L-95"><span class="linenos"> 95</span></a>
</span><span id="L-96"><a href="#L-96"><span class="linenos"> 96</span></a><span class="sd"> while True:</span>
</span><span id="L-97"><a href="#L-97"><span class="linenos"> 97</span></a><span class="sd"> producer.send_async((&#39;Hello-%d&#39; % i).encode(&#39;utf-8&#39;), send_callback)</span>
</span><span id="L-98"><a href="#L-98"><span class="linenos"> 98</span></a>
</span><span id="L-99"><a href="#L-99"><span class="linenos"> 99</span></a><span class="sd"> client.close()</span>
</span><span id="L-100"><a href="#L-100"><span class="linenos"> 100</span></a><span class="sd">&quot;&quot;&quot;</span>
</span><span id="L-101"><a href="#L-101"><span class="linenos"> 101</span></a>
</span><span id="L-102"><a href="#L-102"><span class="linenos"> 102</span></a><span class="kn">import</span> <span class="nn">logging</span>
</span><span id="L-103"><a href="#L-103"><span class="linenos"> 103</span></a><span class="kn">import</span> <span class="nn">_pulsar</span>
</span><span id="L-104"><a href="#L-104"><span class="linenos"> 104</span></a>
</span><span id="L-105"><a href="#L-105"><span class="linenos"> 105</span></a><span class="kn">from</span> <span class="nn">_pulsar</span> <span class="kn">import</span> <span class="n">Result</span><span class="p">,</span> <span class="n">CompressionType</span><span class="p">,</span> <span class="n">ConsumerType</span><span class="p">,</span> <span class="n">InitialPosition</span><span class="p">,</span> <span class="n">PartitionsRoutingMode</span><span class="p">,</span> <span class="n">BatchingType</span> <span class="c1"># noqa: F401</span>
</span><span id="L-106"><a href="#L-106"><span class="linenos"> 106</span></a>
</span><span id="L-107"><a href="#L-107"><span class="linenos"> 107</span></a><span class="kn">from</span> <span class="nn">pulsar.exceptions</span> <span class="kn">import</span> <span class="o">*</span>
</span><span id="L-108"><a href="#L-108"><span class="linenos"> 108</span></a>
</span><span id="L-109"><a href="#L-109"><span class="linenos"> 109</span></a><span class="kn">from</span> <span class="nn">pulsar.functions.function</span> <span class="kn">import</span> <span class="n">Function</span>
</span><span id="L-110"><a href="#L-110"><span class="linenos"> 110</span></a><span class="kn">from</span> <span class="nn">pulsar.functions.context</span> <span class="kn">import</span> <span class="n">Context</span>
</span><span id="L-111"><a href="#L-111"><span class="linenos"> 111</span></a><span class="kn">from</span> <span class="nn">pulsar.functions.serde</span> <span class="kn">import</span> <span class="n">SerDe</span><span class="p">,</span> <span class="n">IdentitySerDe</span><span class="p">,</span> <span class="n">PickleSerDe</span>
</span><span id="L-112"><a href="#L-112"><span class="linenos"> 112</span></a><span class="kn">from</span> <span class="nn">pulsar</span> <span class="kn">import</span> <span class="n">schema</span>
</span><span id="L-113"><a href="#L-113"><span class="linenos"> 113</span></a><span class="n">_schema</span> <span class="o">=</span> <span class="n">schema</span>
</span><span id="L-114"><a href="#L-114"><span class="linenos"> 114</span></a>
</span><span id="L-115"><a href="#L-115"><span class="linenos"> 115</span></a><span class="kn">import</span> <span class="nn">re</span>
</span><span id="L-116"><a href="#L-116"><span class="linenos"> 116</span></a><span class="n">_retype</span> <span class="o">=</span> <span class="nb">type</span><span class="p">(</span><span class="n">re</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span><span class="s1">&#39;x&#39;</span><span class="p">))</span>
</span><span id="L-117"><a href="#L-117"><span class="linenos"> 117</span></a>
</span><span id="L-118"><a href="#L-118"><span class="linenos"> 118</span></a><span class="kn">import</span> <span class="nn">certifi</span>
</span><span id="L-119"><a href="#L-119"><span class="linenos"> 119</span></a><span class="kn">from</span> <span class="nn">datetime</span> <span class="kn">import</span> <span class="n">timedelta</span>
</span><span id="L-120"><a href="#L-120"><span class="linenos"> 120</span></a>
</span><span id="L-121"><a href="#L-121"><span class="linenos"> 121</span></a>
</span><span id="L-122"><a href="#L-122"><span class="linenos"> 122</span></a><span class="k">class</span> <span class="nc">MessageId</span><span class="p">:</span>
</span><span id="L-123"><a href="#L-123"><span class="linenos"> 123</span></a> <span class="sd">&quot;&quot;&quot;</span>
</span><span id="L-124"><a href="#L-124"><span class="linenos"> 124</span></a><span class="sd"> Represents a message id</span>
</span><span id="L-125"><a href="#L-125"><span class="linenos"> 125</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="L-126"><a href="#L-126"><span class="linenos"> 126</span></a>
</span><span id="L-127"><a href="#L-127"><span class="linenos"> 127</span></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">partition</span><span class="o">=-</span><span class="mi">1</span><span class="p">,</span> <span class="n">ledger_id</span><span class="o">=-</span><span class="mi">1</span><span class="p">,</span> <span class="n">entry_id</span><span class="o">=-</span><span class="mi">1</span><span class="p">,</span> <span class="n">batch_index</span><span class="o">=-</span><span class="mi">1</span><span class="p">):</span>
</span><span id="L-128"><a href="#L-128"><span class="linenos"> 128</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_msg_id</span> <span class="o">=</span> <span class="n">_pulsar</span><span class="o">.</span><span class="n">MessageId</span><span class="p">(</span><span class="n">partition</span><span class="p">,</span> <span class="n">ledger_id</span><span class="p">,</span> <span class="n">entry_id</span><span class="p">,</span> <span class="n">batch_index</span><span class="p">)</span>
</span><span id="L-129"><a href="#L-129"><span class="linenos"> 129</span></a>
</span><span id="L-130"><a href="#L-130"><span class="linenos"> 130</span></a> <span class="s1">&#39;Represents the earliest message stored in a topic&#39;</span>
</span><span id="L-131"><a href="#L-131"><span class="linenos"> 131</span></a> <span class="n">earliest</span> <span class="o">=</span> <span class="n">_pulsar</span><span class="o">.</span><span class="n">MessageId</span><span class="o">.</span><span class="n">earliest</span>
</span><span id="L-132"><a href="#L-132"><span class="linenos"> 132</span></a>
</span><span id="L-133"><a href="#L-133"><span class="linenos"> 133</span></a> <span class="s1">&#39;Represents the latest message published on a topic&#39;</span>
</span><span id="L-134"><a href="#L-134"><span class="linenos"> 134</span></a> <span class="n">latest</span> <span class="o">=</span> <span class="n">_pulsar</span><span class="o">.</span><span class="n">MessageId</span><span class="o">.</span><span class="n">latest</span>
</span><span id="L-135"><a href="#L-135"><span class="linenos"> 135</span></a>
</span><span id="L-136"><a href="#L-136"><span class="linenos"> 136</span></a> <span class="k">def</span> <span class="nf">ledger_id</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
</span><span id="L-137"><a href="#L-137"><span class="linenos"> 137</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_msg_id</span><span class="o">.</span><span class="n">ledger_id</span><span class="p">()</span>
</span><span id="L-138"><a href="#L-138"><span class="linenos"> 138</span></a>
</span><span id="L-139"><a href="#L-139"><span class="linenos"> 139</span></a> <span class="k">def</span> <span class="nf">entry_id</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
</span><span id="L-140"><a href="#L-140"><span class="linenos"> 140</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_msg_id</span><span class="o">.</span><span class="n">entry_id</span><span class="p">()</span>
</span><span id="L-141"><a href="#L-141"><span class="linenos"> 141</span></a>
</span><span id="L-142"><a href="#L-142"><span class="linenos"> 142</span></a> <span class="k">def</span> <span class="nf">batch_index</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
</span><span id="L-143"><a href="#L-143"><span class="linenos"> 143</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_msg_id</span><span class="o">.</span><span class="n">batch_index</span><span class="p">()</span>
</span><span id="L-144"><a href="#L-144"><span class="linenos"> 144</span></a>
</span><span id="L-145"><a href="#L-145"><span class="linenos"> 145</span></a> <span class="k">def</span> <span class="nf">partition</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
</span><span id="L-146"><a href="#L-146"><span class="linenos"> 146</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_msg_id</span><span class="o">.</span><span class="n">partition</span><span class="p">()</span>
</span><span id="L-147"><a href="#L-147"><span class="linenos"> 147</span></a>
</span><span id="L-148"><a href="#L-148"><span class="linenos"> 148</span></a> <span class="k">def</span> <span class="nf">serialize</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
</span><span id="L-149"><a href="#L-149"><span class="linenos"> 149</span></a> <span class="sd">&quot;&quot;&quot;</span>
</span><span id="L-150"><a href="#L-150"><span class="linenos"> 150</span></a><span class="sd"> Returns a bytes representation of the message id.</span>
</span><span id="L-151"><a href="#L-151"><span class="linenos"> 151</span></a><span class="sd"> This bytes sequence can be stored and later deserialized.</span>
</span><span id="L-152"><a href="#L-152"><span class="linenos"> 152</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="L-153"><a href="#L-153"><span class="linenos"> 153</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_msg_id</span><span class="o">.</span><span class="n">serialize</span><span class="p">()</span>
</span><span id="L-154"><a href="#L-154"><span class="linenos"> 154</span></a>
</span><span id="L-155"><a href="#L-155"><span class="linenos"> 155</span></a> <span class="nd">@staticmethod</span>
</span><span id="L-156"><a href="#L-156"><span class="linenos"> 156</span></a> <span class="k">def</span> <span class="nf">deserialize</span><span class="p">(</span><span class="n">message_id_bytes</span><span class="p">):</span>
</span><span id="L-157"><a href="#L-157"><span class="linenos"> 157</span></a> <span class="sd">&quot;&quot;&quot;</span>
</span><span id="L-158"><a href="#L-158"><span class="linenos"> 158</span></a><span class="sd"> Deserialize a message id object from a previously</span>
</span><span id="L-159"><a href="#L-159"><span class="linenos"> 159</span></a><span class="sd"> serialized bytes sequence.</span>
</span><span id="L-160"><a href="#L-160"><span class="linenos"> 160</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="L-161"><a href="#L-161"><span class="linenos"> 161</span></a> <span class="k">return</span> <span class="n">_pulsar</span><span class="o">.</span><span class="n">MessageId</span><span class="o">.</span><span class="n">deserialize</span><span class="p">(</span><span class="n">message_id_bytes</span><span class="p">)</span>
</span><span id="L-162"><a href="#L-162"><span class="linenos"> 162</span></a>
</span><span id="L-163"><a href="#L-163"><span class="linenos"> 163</span></a>
</span><span id="L-164"><a href="#L-164"><span class="linenos"> 164</span></a><span class="k">class</span> <span class="nc">Message</span><span class="p">:</span>
</span><span id="L-165"><a href="#L-165"><span class="linenos"> 165</span></a> <span class="sd">&quot;&quot;&quot;</span>
</span><span id="L-166"><a href="#L-166"><span class="linenos"> 166</span></a><span class="sd"> Message objects are returned by a consumer, either by calling `receive` or</span>
</span><span id="L-167"><a href="#L-167"><span class="linenos"> 167</span></a><span class="sd"> through a listener.</span>
</span><span id="L-168"><a href="#L-168"><span class="linenos"> 168</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="L-169"><a href="#L-169"><span class="linenos"> 169</span></a>
</span><span id="L-170"><a href="#L-170"><span class="linenos"> 170</span></a> <span class="k">def</span> <span class="nf">data</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
</span><span id="L-171"><a href="#L-171"><span class="linenos"> 171</span></a> <span class="sd">&quot;&quot;&quot;</span>
</span><span id="L-172"><a href="#L-172"><span class="linenos"> 172</span></a><span class="sd"> Returns object typed bytes with the payload of the message.</span>
</span><span id="L-173"><a href="#L-173"><span class="linenos"> 173</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="L-174"><a href="#L-174"><span class="linenos"> 174</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_message</span><span class="o">.</span><span class="n">data</span><span class="p">()</span>
</span><span id="L-175"><a href="#L-175"><span class="linenos"> 175</span></a>
</span><span id="L-176"><a href="#L-176"><span class="linenos"> 176</span></a> <span class="k">def</span> <span class="nf">value</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
</span><span id="L-177"><a href="#L-177"><span class="linenos"> 177</span></a> <span class="sd">&quot;&quot;&quot;</span>
</span><span id="L-178"><a href="#L-178"><span class="linenos"> 178</span></a><span class="sd"> Returns object with the de-serialized version of the message content</span>
</span><span id="L-179"><a href="#L-179"><span class="linenos"> 179</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="L-180"><a href="#L-180"><span class="linenos"> 180</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_schema</span><span class="o">.</span><span class="n">decode</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_message</span><span class="o">.</span><span class="n">data</span><span class="p">())</span>
</span><span id="L-181"><a href="#L-181"><span class="linenos"> 181</span></a>
</span><span id="L-182"><a href="#L-182"><span class="linenos"> 182</span></a> <span class="k">def</span> <span class="nf">properties</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
</span><span id="L-183"><a href="#L-183"><span class="linenos"> 183</span></a> <span class="sd">&quot;&quot;&quot;</span>
</span><span id="L-184"><a href="#L-184"><span class="linenos"> 184</span></a><span class="sd"> Return the properties attached to the message. Properties are</span>
</span><span id="L-185"><a href="#L-185"><span class="linenos"> 185</span></a><span class="sd"> application-defined key/value pairs that will be attached to the</span>
</span><span id="L-186"><a href="#L-186"><span class="linenos"> 186</span></a><span class="sd"> message.</span>
</span><span id="L-187"><a href="#L-187"><span class="linenos"> 187</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="L-188"><a href="#L-188"><span class="linenos"> 188</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_message</span><span class="o">.</span><span class="n">properties</span><span class="p">()</span>
</span><span id="L-189"><a href="#L-189"><span class="linenos"> 189</span></a>
</span><span id="L-190"><a href="#L-190"><span class="linenos"> 190</span></a> <span class="k">def</span> <span class="nf">partition_key</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
</span><span id="L-191"><a href="#L-191"><span class="linenos"> 191</span></a> <span class="sd">&quot;&quot;&quot;</span>
</span><span id="L-192"><a href="#L-192"><span class="linenos"> 192</span></a><span class="sd"> Get the partitioning key for the message.</span>
</span><span id="L-193"><a href="#L-193"><span class="linenos"> 193</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="L-194"><a href="#L-194"><span class="linenos"> 194</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_message</span><span class="o">.</span><span class="n">partition_key</span><span class="p">()</span>
</span><span id="L-195"><a href="#L-195"><span class="linenos"> 195</span></a>
</span><span id="L-196"><a href="#L-196"><span class="linenos"> 196</span></a> <span class="k">def</span> <span class="nf">publish_timestamp</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
</span><span id="L-197"><a href="#L-197"><span class="linenos"> 197</span></a> <span class="sd">&quot;&quot;&quot;</span>
</span><span id="L-198"><a href="#L-198"><span class="linenos"> 198</span></a><span class="sd"> Get the timestamp in milliseconds with the message publish time.</span>
</span><span id="L-199"><a href="#L-199"><span class="linenos"> 199</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="L-200"><a href="#L-200"><span class="linenos"> 200</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_message</span><span class="o">.</span><span class="n">publish_timestamp</span><span class="p">()</span>
</span><span id="L-201"><a href="#L-201"><span class="linenos"> 201</span></a>
</span><span id="L-202"><a href="#L-202"><span class="linenos"> 202</span></a> <span class="k">def</span> <span class="nf">event_timestamp</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
</span><span id="L-203"><a href="#L-203"><span class="linenos"> 203</span></a> <span class="sd">&quot;&quot;&quot;</span>
</span><span id="L-204"><a href="#L-204"><span class="linenos"> 204</span></a><span class="sd"> Get the timestamp in milliseconds with the message event time.</span>
</span><span id="L-205"><a href="#L-205"><span class="linenos"> 205</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="L-206"><a href="#L-206"><span class="linenos"> 206</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_message</span><span class="o">.</span><span class="n">event_timestamp</span><span class="p">()</span>
</span><span id="L-207"><a href="#L-207"><span class="linenos"> 207</span></a>
</span><span id="L-208"><a href="#L-208"><span class="linenos"> 208</span></a> <span class="k">def</span> <span class="nf">message_id</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
</span><span id="L-209"><a href="#L-209"><span class="linenos"> 209</span></a> <span class="sd">&quot;&quot;&quot;</span>
</span><span id="L-210"><a href="#L-210"><span class="linenos"> 210</span></a><span class="sd"> The message ID that can be used to refere to this particular message.</span>
</span><span id="L-211"><a href="#L-211"><span class="linenos"> 211</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="L-212"><a href="#L-212"><span class="linenos"> 212</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_message</span><span class="o">.</span><span class="n">message_id</span><span class="p">()</span>
</span><span id="L-213"><a href="#L-213"><span class="linenos"> 213</span></a>
</span><span id="L-214"><a href="#L-214"><span class="linenos"> 214</span></a> <span class="k">def</span> <span class="nf">topic_name</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
</span><span id="L-215"><a href="#L-215"><span class="linenos"> 215</span></a> <span class="sd">&quot;&quot;&quot;</span>
</span><span id="L-216"><a href="#L-216"><span class="linenos"> 216</span></a><span class="sd"> Get the topic Name from which this message originated from</span>
</span><span id="L-217"><a href="#L-217"><span class="linenos"> 217</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="L-218"><a href="#L-218"><span class="linenos"> 218</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_message</span><span class="o">.</span><span class="n">topic_name</span><span class="p">()</span>
</span><span id="L-219"><a href="#L-219"><span class="linenos"> 219</span></a>
</span><span id="L-220"><a href="#L-220"><span class="linenos"> 220</span></a> <span class="k">def</span> <span class="nf">redelivery_count</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
</span><span id="L-221"><a href="#L-221"><span class="linenos"> 221</span></a> <span class="sd">&quot;&quot;&quot;</span>
</span><span id="L-222"><a href="#L-222"><span class="linenos"> 222</span></a><span class="sd"> Get the redelivery count for this message</span>
</span><span id="L-223"><a href="#L-223"><span class="linenos"> 223</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="L-224"><a href="#L-224"><span class="linenos"> 224</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_message</span><span class="o">.</span><span class="n">redelivery_count</span><span class="p">()</span>
</span><span id="L-225"><a href="#L-225"><span class="linenos"> 225</span></a>
</span><span id="L-226"><a href="#L-226"><span class="linenos"> 226</span></a> <span class="k">def</span> <span class="nf">schema_version</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
</span><span id="L-227"><a href="#L-227"><span class="linenos"> 227</span></a> <span class="sd">&quot;&quot;&quot;</span>
</span><span id="L-228"><a href="#L-228"><span class="linenos"> 228</span></a><span class="sd"> Get the schema version for this message</span>
</span><span id="L-229"><a href="#L-229"><span class="linenos"> 229</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="L-230"><a href="#L-230"><span class="linenos"> 230</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_message</span><span class="o">.</span><span class="n">schema_version</span><span class="p">()</span>
</span><span id="L-231"><a href="#L-231"><span class="linenos"> 231</span></a>
</span><span id="L-232"><a href="#L-232"><span class="linenos"> 232</span></a> <span class="nd">@staticmethod</span>
</span><span id="L-233"><a href="#L-233"><span class="linenos"> 233</span></a> <span class="k">def</span> <span class="nf">_wrap</span><span class="p">(</span><span class="n">_message</span><span class="p">):</span>
</span><span id="L-234"><a href="#L-234"><span class="linenos"> 234</span></a> <span class="bp">self</span> <span class="o">=</span> <span class="n">Message</span><span class="p">()</span>
</span><span id="L-235"><a href="#L-235"><span class="linenos"> 235</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_message</span> <span class="o">=</span> <span class="n">_message</span>
</span><span id="L-236"><a href="#L-236"><span class="linenos"> 236</span></a> <span class="k">return</span> <span class="bp">self</span>
</span><span id="L-237"><a href="#L-237"><span class="linenos"> 237</span></a>
</span><span id="L-238"><a href="#L-238"><span class="linenos"> 238</span></a>
</span><span id="L-239"><a href="#L-239"><span class="linenos"> 239</span></a><span class="k">class</span> <span class="nc">MessageBatch</span><span class="p">:</span>
</span><span id="L-240"><a href="#L-240"><span class="linenos"> 240</span></a>
</span><span id="L-241"><a href="#L-241"><span class="linenos"> 241</span></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
</span><span id="L-242"><a href="#L-242"><span class="linenos"> 242</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_msg_batch</span> <span class="o">=</span> <span class="n">_pulsar</span><span class="o">.</span><span class="n">MessageBatch</span><span class="p">()</span>
</span><span id="L-243"><a href="#L-243"><span class="linenos"> 243</span></a>
</span><span id="L-244"><a href="#L-244"><span class="linenos"> 244</span></a> <span class="k">def</span> <span class="nf">with_message_id</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">msg_id</span><span class="p">):</span>
</span><span id="L-245"><a href="#L-245"><span class="linenos"> 245</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">msg_id</span><span class="p">,</span> <span class="n">_pulsar</span><span class="o">.</span><span class="n">MessageId</span><span class="p">):</span>
</span><span id="L-246"><a href="#L-246"><span class="linenos"> 246</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">msg_id</span><span class="p">,</span> <span class="n">MessageId</span><span class="p">):</span>
</span><span id="L-247"><a href="#L-247"><span class="linenos"> 247</span></a> <span class="n">msg_id</span> <span class="o">=</span> <span class="n">msg_id</span><span class="o">.</span><span class="n">_msg_id</span>
</span><span id="L-248"><a href="#L-248"><span class="linenos"> 248</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="L-249"><a href="#L-249"><span class="linenos"> 249</span></a> <span class="k">raise</span> <span class="ne">TypeError</span><span class="p">(</span><span class="s2">&quot;unknown message id type&quot;</span><span class="p">)</span>
</span><span id="L-250"><a href="#L-250"><span class="linenos"> 250</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_msg_batch</span><span class="o">.</span><span class="n">with_message_id</span><span class="p">(</span><span class="n">msg_id</span><span class="p">)</span>
</span><span id="L-251"><a href="#L-251"><span class="linenos"> 251</span></a> <span class="k">return</span> <span class="bp">self</span>
</span><span id="L-252"><a href="#L-252"><span class="linenos"> 252</span></a>
</span><span id="L-253"><a href="#L-253"><span class="linenos"> 253</span></a> <span class="k">def</span> <span class="nf">parse_from</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">data</span><span class="p">,</span> <span class="n">size</span><span class="p">):</span>
</span><span id="L-254"><a href="#L-254"><span class="linenos"> 254</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_msg_batch</span><span class="o">.</span><span class="n">parse_from</span><span class="p">(</span><span class="n">data</span><span class="p">,</span> <span class="n">size</span><span class="p">)</span>
</span><span id="L-255"><a href="#L-255"><span class="linenos"> 255</span></a> <span class="n">_msgs</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_msg_batch</span><span class="o">.</span><span class="n">messages</span><span class="p">()</span>
</span><span id="L-256"><a href="#L-256"><span class="linenos"> 256</span></a> <span class="k">return</span> <span class="nb">list</span><span class="p">(</span><span class="nb">map</span><span class="p">(</span><span class="n">Message</span><span class="o">.</span><span class="n">_wrap</span><span class="p">,</span> <span class="n">_msgs</span><span class="p">))</span>
</span><span id="L-257"><a href="#L-257"><span class="linenos"> 257</span></a>
</span><span id="L-258"><a href="#L-258"><span class="linenos"> 258</span></a>
</span><span id="L-259"><a href="#L-259"><span class="linenos"> 259</span></a><span class="k">class</span> <span class="nc">Authentication</span><span class="p">:</span>
</span><span id="L-260"><a href="#L-260"><span class="linenos"> 260</span></a> <span class="sd">&quot;&quot;&quot;</span>
</span><span id="L-261"><a href="#L-261"><span class="linenos"> 261</span></a><span class="sd"> Authentication provider object. Used to load authentication from an external</span>
</span><span id="L-262"><a href="#L-262"><span class="linenos"> 262</span></a><span class="sd"> shared library.</span>
</span><span id="L-263"><a href="#L-263"><span class="linenos"> 263</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="L-264"><a href="#L-264"><span class="linenos"> 264</span></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">dynamicLibPath</span><span class="p">,</span> <span class="n">authParamsString</span><span class="p">):</span>
</span><span id="L-265"><a href="#L-265"><span class="linenos"> 265</span></a> <span class="sd">&quot;&quot;&quot;</span>
</span><span id="L-266"><a href="#L-266"><span class="linenos"> 266</span></a><span class="sd"> Create the authentication provider instance.</span>
</span><span id="L-267"><a href="#L-267"><span class="linenos"> 267</span></a>
</span><span id="L-268"><a href="#L-268"><span class="linenos"> 268</span></a><span class="sd"> **Args**</span>
</span><span id="L-269"><a href="#L-269"><span class="linenos"> 269</span></a>
</span><span id="L-270"><a href="#L-270"><span class="linenos"> 270</span></a><span class="sd"> * `dynamicLibPath`: Path to the authentication provider shared library</span>
</span><span id="L-271"><a href="#L-271"><span class="linenos"> 271</span></a><span class="sd"> (such as `tls.so`)</span>
</span><span id="L-272"><a href="#L-272"><span class="linenos"> 272</span></a><span class="sd"> * `authParamsString`: Comma-separated list of provider-specific</span>
</span><span id="L-273"><a href="#L-273"><span class="linenos"> 273</span></a><span class="sd"> configuration params</span>
</span><span id="L-274"><a href="#L-274"><span class="linenos"> 274</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="L-275"><a href="#L-275"><span class="linenos"> 275</span></a> <span class="n">_check_type</span><span class="p">(</span><span class="nb">str</span><span class="p">,</span> <span class="n">dynamicLibPath</span><span class="p">,</span> <span class="s1">&#39;dynamicLibPath&#39;</span><span class="p">)</span>
</span><span id="L-276"><a href="#L-276"><span class="linenos"> 276</span></a> <span class="n">_check_type</span><span class="p">(</span><span class="nb">str</span><span class="p">,</span> <span class="n">authParamsString</span><span class="p">,</span> <span class="s1">&#39;authParamsString&#39;</span><span class="p">)</span>
</span><span id="L-277"><a href="#L-277"><span class="linenos"> 277</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">auth</span> <span class="o">=</span> <span class="n">_pulsar</span><span class="o">.</span><span class="n">Authentication</span><span class="p">(</span><span class="n">dynamicLibPath</span><span class="p">,</span> <span class="n">authParamsString</span><span class="p">)</span>
</span><span id="L-278"><a href="#L-278"><span class="linenos"> 278</span></a>
</span><span id="L-279"><a href="#L-279"><span class="linenos"> 279</span></a>
</span><span id="L-280"><a href="#L-280"><span class="linenos"> 280</span></a><span class="k">class</span> <span class="nc">AuthenticationTLS</span><span class="p">(</span><span class="n">Authentication</span><span class="p">):</span>
</span><span id="L-281"><a href="#L-281"><span class="linenos"> 281</span></a> <span class="sd">&quot;&quot;&quot;</span>
</span><span id="L-282"><a href="#L-282"><span class="linenos"> 282</span></a><span class="sd"> TLS Authentication implementation</span>
</span><span id="L-283"><a href="#L-283"><span class="linenos"> 283</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="L-284"><a href="#L-284"><span class="linenos"> 284</span></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">certificate_path</span><span class="p">,</span> <span class="n">private_key_path</span><span class="p">):</span>
</span><span id="L-285"><a href="#L-285"><span class="linenos"> 285</span></a> <span class="sd">&quot;&quot;&quot;</span>
</span><span id="L-286"><a href="#L-286"><span class="linenos"> 286</span></a><span class="sd"> Create the TLS authentication provider instance.</span>
</span><span id="L-287"><a href="#L-287"><span class="linenos"> 287</span></a>
</span><span id="L-288"><a href="#L-288"><span class="linenos"> 288</span></a><span class="sd"> **Args**</span>
</span><span id="L-289"><a href="#L-289"><span class="linenos"> 289</span></a>
</span><span id="L-290"><a href="#L-290"><span class="linenos"> 290</span></a><span class="sd"> * `certificatePath`: Path to the public certificate</span>
</span><span id="L-291"><a href="#L-291"><span class="linenos"> 291</span></a><span class="sd"> * `privateKeyPath`: Path to private TLS key</span>
</span><span id="L-292"><a href="#L-292"><span class="linenos"> 292</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="L-293"><a href="#L-293"><span class="linenos"> 293</span></a> <span class="n">_check_type</span><span class="p">(</span><span class="nb">str</span><span class="p">,</span> <span class="n">certificate_path</span><span class="p">,</span> <span class="s1">&#39;certificate_path&#39;</span><span class="p">)</span>
</span><span id="L-294"><a href="#L-294"><span class="linenos"> 294</span></a> <span class="n">_check_type</span><span class="p">(</span><span class="nb">str</span><span class="p">,</span> <span class="n">private_key_path</span><span class="p">,</span> <span class="s1">&#39;private_key_path&#39;</span><span class="p">)</span>
</span><span id="L-295"><a href="#L-295"><span class="linenos"> 295</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">auth</span> <span class="o">=</span> <span class="n">_pulsar</span><span class="o">.</span><span class="n">AuthenticationTLS</span><span class="p">(</span><span class="n">certificate_path</span><span class="p">,</span> <span class="n">private_key_path</span><span class="p">)</span>
</span><span id="L-296"><a href="#L-296"><span class="linenos"> 296</span></a>
</span><span id="L-297"><a href="#L-297"><span class="linenos"> 297</span></a>
</span><span id="L-298"><a href="#L-298"><span class="linenos"> 298</span></a><span class="k">class</span> <span class="nc">AuthenticationToken</span><span class="p">(</span><span class="n">Authentication</span><span class="p">):</span>
</span><span id="L-299"><a href="#L-299"><span class="linenos"> 299</span></a> <span class="sd">&quot;&quot;&quot;</span>
</span><span id="L-300"><a href="#L-300"><span class="linenos"> 300</span></a><span class="sd"> Token based authentication implementation</span>
</span><span id="L-301"><a href="#L-301"><span class="linenos"> 301</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="L-302"><a href="#L-302"><span class="linenos"> 302</span></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">token</span><span class="p">):</span>
</span><span id="L-303"><a href="#L-303"><span class="linenos"> 303</span></a> <span class="sd">&quot;&quot;&quot;</span>
</span><span id="L-304"><a href="#L-304"><span class="linenos"> 304</span></a><span class="sd"> Create the token authentication provider instance.</span>
</span><span id="L-305"><a href="#L-305"><span class="linenos"> 305</span></a>
</span><span id="L-306"><a href="#L-306"><span class="linenos"> 306</span></a><span class="sd"> **Args**</span>
</span><span id="L-307"><a href="#L-307"><span class="linenos"> 307</span></a>
</span><span id="L-308"><a href="#L-308"><span class="linenos"> 308</span></a><span class="sd"> * `token`: A string containing the token or a functions that provides a</span>
</span><span id="L-309"><a href="#L-309"><span class="linenos"> 309</span></a><span class="sd"> string with the token</span>
</span><span id="L-310"><a href="#L-310"><span class="linenos"> 310</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="L-311"><a href="#L-311"><span class="linenos"> 311</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="p">(</span><span class="nb">isinstance</span><span class="p">(</span><span class="n">token</span><span class="p">,</span> <span class="nb">str</span><span class="p">)</span> <span class="ow">or</span> <span class="n">callable</span><span class="p">(</span><span class="n">token</span><span class="p">)):</span>
</span><span id="L-312"><a href="#L-312"><span class="linenos"> 312</span></a> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">&quot;Argument token is expected to be of type &#39;str&#39; or a function returning &#39;str&#39;&quot;</span><span class="p">)</span>
</span><span id="L-313"><a href="#L-313"><span class="linenos"> 313</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">auth</span> <span class="o">=</span> <span class="n">_pulsar</span><span class="o">.</span><span class="n">AuthenticationToken</span><span class="p">(</span><span class="n">token</span><span class="p">)</span>
</span><span id="L-314"><a href="#L-314"><span class="linenos"> 314</span></a>
</span><span id="L-315"><a href="#L-315"><span class="linenos"> 315</span></a>
</span><span id="L-316"><a href="#L-316"><span class="linenos"> 316</span></a><span class="k">class</span> <span class="nc">AuthenticationAthenz</span><span class="p">(</span><span class="n">Authentication</span><span class="p">):</span>
</span><span id="L-317"><a href="#L-317"><span class="linenos"> 317</span></a> <span class="sd">&quot;&quot;&quot;</span>
</span><span id="L-318"><a href="#L-318"><span class="linenos"> 318</span></a><span class="sd"> Athenz Authentication implementation</span>
</span><span id="L-319"><a href="#L-319"><span class="linenos"> 319</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="L-320"><a href="#L-320"><span class="linenos"> 320</span></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">auth_params_string</span><span class="p">):</span>
</span><span id="L-321"><a href="#L-321"><span class="linenos"> 321</span></a> <span class="sd">&quot;&quot;&quot;</span>
</span><span id="L-322"><a href="#L-322"><span class="linenos"> 322</span></a><span class="sd"> Create the Athenz authentication provider instance.</span>
</span><span id="L-323"><a href="#L-323"><span class="linenos"> 323</span></a>
</span><span id="L-324"><a href="#L-324"><span class="linenos"> 324</span></a><span class="sd"> **Args**</span>
</span><span id="L-325"><a href="#L-325"><span class="linenos"> 325</span></a>
</span><span id="L-326"><a href="#L-326"><span class="linenos"> 326</span></a><span class="sd"> * `auth_params_string`: JSON encoded configuration for Athenz client</span>
</span><span id="L-327"><a href="#L-327"><span class="linenos"> 327</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="L-328"><a href="#L-328"><span class="linenos"> 328</span></a> <span class="n">_check_type</span><span class="p">(</span><span class="nb">str</span><span class="p">,</span> <span class="n">auth_params_string</span><span class="p">,</span> <span class="s1">&#39;auth_params_string&#39;</span><span class="p">)</span>
</span><span id="L-329"><a href="#L-329"><span class="linenos"> 329</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">auth</span> <span class="o">=</span> <span class="n">_pulsar</span><span class="o">.</span><span class="n">AuthenticationAthenz</span><span class="p">(</span><span class="n">auth_params_string</span><span class="p">)</span>
</span><span id="L-330"><a href="#L-330"><span class="linenos"> 330</span></a>
</span><span id="L-331"><a href="#L-331"><span class="linenos"> 331</span></a><span class="k">class</span> <span class="nc">AuthenticationOauth2</span><span class="p">(</span><span class="n">Authentication</span><span class="p">):</span>
</span><span id="L-332"><a href="#L-332"><span class="linenos"> 332</span></a> <span class="sd">&quot;&quot;&quot;</span>
</span><span id="L-333"><a href="#L-333"><span class="linenos"> 333</span></a><span class="sd"> Oauth2 Authentication implementation</span>
</span><span id="L-334"><a href="#L-334"><span class="linenos"> 334</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="L-335"><a href="#L-335"><span class="linenos"> 335</span></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">auth_params_string</span><span class="p">):</span>
</span><span id="L-336"><a href="#L-336"><span class="linenos"> 336</span></a> <span class="sd">&quot;&quot;&quot;</span>
</span><span id="L-337"><a href="#L-337"><span class="linenos"> 337</span></a><span class="sd"> Create the Oauth2 authentication provider instance.</span>
</span><span id="L-338"><a href="#L-338"><span class="linenos"> 338</span></a>
</span><span id="L-339"><a href="#L-339"><span class="linenos"> 339</span></a><span class="sd"> **Args**</span>
</span><span id="L-340"><a href="#L-340"><span class="linenos"> 340</span></a>
</span><span id="L-341"><a href="#L-341"><span class="linenos"> 341</span></a><span class="sd"> * `auth_params_string`: JSON encoded configuration for Oauth2 client</span>
</span><span id="L-342"><a href="#L-342"><span class="linenos"> 342</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="L-343"><a href="#L-343"><span class="linenos"> 343</span></a> <span class="n">_check_type</span><span class="p">(</span><span class="nb">str</span><span class="p">,</span> <span class="n">auth_params_string</span><span class="p">,</span> <span class="s1">&#39;auth_params_string&#39;</span><span class="p">)</span>
</span><span id="L-344"><a href="#L-344"><span class="linenos"> 344</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">auth</span> <span class="o">=</span> <span class="n">_pulsar</span><span class="o">.</span><span class="n">AuthenticationOauth2</span><span class="p">(</span><span class="n">auth_params_string</span><span class="p">)</span>
</span><span id="L-345"><a href="#L-345"><span class="linenos"> 345</span></a>
</span><span id="L-346"><a href="#L-346"><span class="linenos"> 346</span></a><span class="k">class</span> <span class="nc">Client</span><span class="p">:</span>
</span><span id="L-347"><a href="#L-347"><span class="linenos"> 347</span></a> <span class="sd">&quot;&quot;&quot;</span>
</span><span id="L-348"><a href="#L-348"><span class="linenos"> 348</span></a><span class="sd"> The Pulsar client. A single client instance can be used to create producers</span>
</span><span id="L-349"><a href="#L-349"><span class="linenos"> 349</span></a><span class="sd"> and consumers on multiple topics.</span>
</span><span id="L-350"><a href="#L-350"><span class="linenos"> 350</span></a>
</span><span id="L-351"><a href="#L-351"><span class="linenos"> 351</span></a><span class="sd"> The client will share the same connection pool and threads across all</span>
</span><span id="L-352"><a href="#L-352"><span class="linenos"> 352</span></a><span class="sd"> producers and consumers.</span>
</span><span id="L-353"><a href="#L-353"><span class="linenos"> 353</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="L-354"><a href="#L-354"><span class="linenos"> 354</span></a>
</span><span id="L-355"><a href="#L-355"><span class="linenos"> 355</span></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">service_url</span><span class="p">,</span>
</span><span id="L-356"><a href="#L-356"><span class="linenos"> 356</span></a> <span class="n">authentication</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
</span><span id="L-357"><a href="#L-357"><span class="linenos"> 357</span></a> <span class="n">operation_timeout_seconds</span><span class="o">=</span><span class="mi">30</span><span class="p">,</span>
</span><span id="L-358"><a href="#L-358"><span class="linenos"> 358</span></a> <span class="n">io_threads</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span>
</span><span id="L-359"><a href="#L-359"><span class="linenos"> 359</span></a> <span class="n">message_listener_threads</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span>
</span><span id="L-360"><a href="#L-360"><span class="linenos"> 360</span></a> <span class="n">concurrent_lookup_requests</span><span class="o">=</span><span class="mi">50000</span><span class="p">,</span>
</span><span id="L-361"><a href="#L-361"><span class="linenos"> 361</span></a> <span class="n">log_conf_file_path</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
</span><span id="L-362"><a href="#L-362"><span class="linenos"> 362</span></a> <span class="n">use_tls</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
</span><span id="L-363"><a href="#L-363"><span class="linenos"> 363</span></a> <span class="n">tls_trust_certs_file_path</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
</span><span id="L-364"><a href="#L-364"><span class="linenos"> 364</span></a> <span class="n">tls_allow_insecure_connection</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
</span><span id="L-365"><a href="#L-365"><span class="linenos"> 365</span></a> <span class="n">tls_validate_hostname</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
</span><span id="L-366"><a href="#L-366"><span class="linenos"> 366</span></a> <span class="n">logger</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
</span><span id="L-367"><a href="#L-367"><span class="linenos"> 367</span></a> <span class="n">connection_timeout_ms</span><span class="o">=</span><span class="mi">10000</span><span class="p">,</span>
</span><span id="L-368"><a href="#L-368"><span class="linenos"> 368</span></a> <span class="p">):</span>
</span><span id="L-369"><a href="#L-369"><span class="linenos"> 369</span></a> <span class="sd">&quot;&quot;&quot;</span>
</span><span id="L-370"><a href="#L-370"><span class="linenos"> 370</span></a><span class="sd"> Create a new Pulsar client instance.</span>
</span><span id="L-371"><a href="#L-371"><span class="linenos"> 371</span></a>
</span><span id="L-372"><a href="#L-372"><span class="linenos"> 372</span></a><span class="sd"> **Args**</span>
</span><span id="L-373"><a href="#L-373"><span class="linenos"> 373</span></a>
</span><span id="L-374"><a href="#L-374"><span class="linenos"> 374</span></a><span class="sd"> * `service_url`: The Pulsar service url eg: pulsar://my-broker.com:6650/</span>
</span><span id="L-375"><a href="#L-375"><span class="linenos"> 375</span></a>
</span><span id="L-376"><a href="#L-376"><span class="linenos"> 376</span></a><span class="sd"> **Options**</span>
</span><span id="L-377"><a href="#L-377"><span class="linenos"> 377</span></a>
</span><span id="L-378"><a href="#L-378"><span class="linenos"> 378</span></a><span class="sd"> * `authentication`:</span>
</span><span id="L-379"><a href="#L-379"><span class="linenos"> 379</span></a><span class="sd"> Set the authentication provider to be used with the broker. For example:</span>
</span><span id="L-380"><a href="#L-380"><span class="linenos"> 380</span></a><span class="sd"> `AuthenticationTls`, AuthenticaionToken, `AuthenticationAthenz`or `AuthenticationOauth2`</span>
</span><span id="L-381"><a href="#L-381"><span class="linenos"> 381</span></a><span class="sd"> * `operation_timeout_seconds`:</span>
</span><span id="L-382"><a href="#L-382"><span class="linenos"> 382</span></a><span class="sd"> Set timeout on client operations (subscribe, create producer, close,</span>
</span><span id="L-383"><a href="#L-383"><span class="linenos"> 383</span></a><span class="sd"> unsubscribe).</span>
</span><span id="L-384"><a href="#L-384"><span class="linenos"> 384</span></a><span class="sd"> * `io_threads`:</span>
</span><span id="L-385"><a href="#L-385"><span class="linenos"> 385</span></a><span class="sd"> Set the number of IO threads to be used by the Pulsar client.</span>
</span><span id="L-386"><a href="#L-386"><span class="linenos"> 386</span></a><span class="sd"> * `message_listener_threads`:</span>
</span><span id="L-387"><a href="#L-387"><span class="linenos"> 387</span></a><span class="sd"> Set the number of threads to be used by the Pulsar client when</span>
</span><span id="L-388"><a href="#L-388"><span class="linenos"> 388</span></a><span class="sd"> delivering messages through message listener. The default is 1 thread</span>
</span><span id="L-389"><a href="#L-389"><span class="linenos"> 389</span></a><span class="sd"> per Pulsar client. If using more than 1 thread, messages for distinct</span>
</span><span id="L-390"><a href="#L-390"><span class="linenos"> 390</span></a><span class="sd"> `message_listener`s will be delivered in different threads, however a</span>
</span><span id="L-391"><a href="#L-391"><span class="linenos"> 391</span></a><span class="sd"> single `MessageListener` will always be assigned to the same thread.</span>
</span><span id="L-392"><a href="#L-392"><span class="linenos"> 392</span></a><span class="sd"> * `concurrent_lookup_requests`:</span>
</span><span id="L-393"><a href="#L-393"><span class="linenos"> 393</span></a><span class="sd"> Number of concurrent lookup-requests allowed on each broker connection</span>
</span><span id="L-394"><a href="#L-394"><span class="linenos"> 394</span></a><span class="sd"> to prevent overload on the broker.</span>
</span><span id="L-395"><a href="#L-395"><span class="linenos"> 395</span></a><span class="sd"> * `log_conf_file_path`:</span>
</span><span id="L-396"><a href="#L-396"><span class="linenos"> 396</span></a><span class="sd"> Initialize log4cxx from a configuration file.</span>
</span><span id="L-397"><a href="#L-397"><span class="linenos"> 397</span></a><span class="sd"> * `use_tls`:</span>
</span><span id="L-398"><a href="#L-398"><span class="linenos"> 398</span></a><span class="sd"> Configure whether to use TLS encryption on the connection. This setting</span>
</span><span id="L-399"><a href="#L-399"><span class="linenos"> 399</span></a><span class="sd"> is deprecated. TLS will be automatically enabled if the `serviceUrl` is</span>
</span><span id="L-400"><a href="#L-400"><span class="linenos"> 400</span></a><span class="sd"> set to `pulsar+ssl://` or `https://`</span>
</span><span id="L-401"><a href="#L-401"><span class="linenos"> 401</span></a><span class="sd"> * `tls_trust_certs_file_path`:</span>
</span><span id="L-402"><a href="#L-402"><span class="linenos"> 402</span></a><span class="sd"> Set the path to the trusted TLS certificate file. If empty defaults to</span>
</span><span id="L-403"><a href="#L-403"><span class="linenos"> 403</span></a><span class="sd"> certifi.</span>
</span><span id="L-404"><a href="#L-404"><span class="linenos"> 404</span></a><span class="sd"> * `tls_allow_insecure_connection`:</span>
</span><span id="L-405"><a href="#L-405"><span class="linenos"> 405</span></a><span class="sd"> Configure whether the Pulsar client accepts untrusted TLS certificates</span>
</span><span id="L-406"><a href="#L-406"><span class="linenos"> 406</span></a><span class="sd"> from the broker.</span>
</span><span id="L-407"><a href="#L-407"><span class="linenos"> 407</span></a><span class="sd"> * `tls_validate_hostname`:</span>
</span><span id="L-408"><a href="#L-408"><span class="linenos"> 408</span></a><span class="sd"> Configure whether the Pulsar client validates that the hostname of the</span>
</span><span id="L-409"><a href="#L-409"><span class="linenos"> 409</span></a><span class="sd"> endpoint, matches the common name on the TLS certificate presented by</span>
</span><span id="L-410"><a href="#L-410"><span class="linenos"> 410</span></a><span class="sd"> the endpoint.</span>
</span><span id="L-411"><a href="#L-411"><span class="linenos"> 411</span></a><span class="sd"> * `logger`:</span>
</span><span id="L-412"><a href="#L-412"><span class="linenos"> 412</span></a><span class="sd"> Set a Python logger for this Pulsar client. Should be an instance of `logging.Logger`.</span>
</span><span id="L-413"><a href="#L-413"><span class="linenos"> 413</span></a><span class="sd"> * `connection_timeout_ms`:</span>
</span><span id="L-414"><a href="#L-414"><span class="linenos"> 414</span></a><span class="sd"> Set timeout in milliseconds on TCP connections.</span>
</span><span id="L-415"><a href="#L-415"><span class="linenos"> 415</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="L-416"><a href="#L-416"><span class="linenos"> 416</span></a> <span class="n">_check_type</span><span class="p">(</span><span class="nb">str</span><span class="p">,</span> <span class="n">service_url</span><span class="p">,</span> <span class="s1">&#39;service_url&#39;</span><span class="p">)</span>
</span><span id="L-417"><a href="#L-417"><span class="linenos"> 417</span></a> <span class="n">_check_type_or_none</span><span class="p">(</span><span class="n">Authentication</span><span class="p">,</span> <span class="n">authentication</span><span class="p">,</span> <span class="s1">&#39;authentication&#39;</span><span class="p">)</span>
</span><span id="L-418"><a href="#L-418"><span class="linenos"> 418</span></a> <span class="n">_check_type</span><span class="p">(</span><span class="nb">int</span><span class="p">,</span> <span class="n">operation_timeout_seconds</span><span class="p">,</span> <span class="s1">&#39;operation_timeout_seconds&#39;</span><span class="p">)</span>
</span><span id="L-419"><a href="#L-419"><span class="linenos"> 419</span></a> <span class="n">_check_type</span><span class="p">(</span><span class="nb">int</span><span class="p">,</span> <span class="n">connection_timeout_ms</span><span class="p">,</span> <span class="s1">&#39;connection_timeout_ms&#39;</span><span class="p">)</span>
</span><span id="L-420"><a href="#L-420"><span class="linenos"> 420</span></a> <span class="n">_check_type</span><span class="p">(</span><span class="nb">int</span><span class="p">,</span> <span class="n">io_threads</span><span class="p">,</span> <span class="s1">&#39;io_threads&#39;</span><span class="p">)</span>
</span><span id="L-421"><a href="#L-421"><span class="linenos"> 421</span></a> <span class="n">_check_type</span><span class="p">(</span><span class="nb">int</span><span class="p">,</span> <span class="n">message_listener_threads</span><span class="p">,</span> <span class="s1">&#39;message_listener_threads&#39;</span><span class="p">)</span>
</span><span id="L-422"><a href="#L-422"><span class="linenos"> 422</span></a> <span class="n">_check_type</span><span class="p">(</span><span class="nb">int</span><span class="p">,</span> <span class="n">concurrent_lookup_requests</span><span class="p">,</span> <span class="s1">&#39;concurrent_lookup_requests&#39;</span><span class="p">)</span>
</span><span id="L-423"><a href="#L-423"><span class="linenos"> 423</span></a> <span class="n">_check_type_or_none</span><span class="p">(</span><span class="nb">str</span><span class="p">,</span> <span class="n">log_conf_file_path</span><span class="p">,</span> <span class="s1">&#39;log_conf_file_path&#39;</span><span class="p">)</span>
</span><span id="L-424"><a href="#L-424"><span class="linenos"> 424</span></a> <span class="n">_check_type</span><span class="p">(</span><span class="nb">bool</span><span class="p">,</span> <span class="n">use_tls</span><span class="p">,</span> <span class="s1">&#39;use_tls&#39;</span><span class="p">)</span>
</span><span id="L-425"><a href="#L-425"><span class="linenos"> 425</span></a> <span class="n">_check_type_or_none</span><span class="p">(</span><span class="nb">str</span><span class="p">,</span> <span class="n">tls_trust_certs_file_path</span><span class="p">,</span> <span class="s1">&#39;tls_trust_certs_file_path&#39;</span><span class="p">)</span>
</span><span id="L-426"><a href="#L-426"><span class="linenos"> 426</span></a> <span class="n">_check_type</span><span class="p">(</span><span class="nb">bool</span><span class="p">,</span> <span class="n">tls_allow_insecure_connection</span><span class="p">,</span> <span class="s1">&#39;tls_allow_insecure_connection&#39;</span><span class="p">)</span>
</span><span id="L-427"><a href="#L-427"><span class="linenos"> 427</span></a> <span class="n">_check_type</span><span class="p">(</span><span class="nb">bool</span><span class="p">,</span> <span class="n">tls_validate_hostname</span><span class="p">,</span> <span class="s1">&#39;tls_validate_hostname&#39;</span><span class="p">)</span>
</span><span id="L-428"><a href="#L-428"><span class="linenos"> 428</span></a> <span class="n">_check_type_or_none</span><span class="p">(</span><span class="n">logging</span><span class="o">.</span><span class="n">Logger</span><span class="p">,</span> <span class="n">logger</span><span class="p">,</span> <span class="s1">&#39;logger&#39;</span><span class="p">)</span>
</span><span id="L-429"><a href="#L-429"><span class="linenos"> 429</span></a>
</span><span id="L-430"><a href="#L-430"><span class="linenos"> 430</span></a> <span class="n">conf</span> <span class="o">=</span> <span class="n">_pulsar</span><span class="o">.</span><span class="n">ClientConfiguration</span><span class="p">()</span>
</span><span id="L-431"><a href="#L-431"><span class="linenos"> 431</span></a> <span class="k">if</span> <span class="n">authentication</span><span class="p">:</span>
</span><span id="L-432"><a href="#L-432"><span class="linenos"> 432</span></a> <span class="n">conf</span><span class="o">.</span><span class="n">authentication</span><span class="p">(</span><span class="n">authentication</span><span class="o">.</span><span class="n">auth</span><span class="p">)</span>
</span><span id="L-433"><a href="#L-433"><span class="linenos"> 433</span></a> <span class="n">conf</span><span class="o">.</span><span class="n">operation_timeout_seconds</span><span class="p">(</span><span class="n">operation_timeout_seconds</span><span class="p">)</span>
</span><span id="L-434"><a href="#L-434"><span class="linenos"> 434</span></a> <span class="n">conf</span><span class="o">.</span><span class="n">connection_timeout</span><span class="p">(</span><span class="n">connection_timeout_ms</span><span class="p">)</span>
</span><span id="L-435"><a href="#L-435"><span class="linenos"> 435</span></a> <span class="n">conf</span><span class="o">.</span><span class="n">io_threads</span><span class="p">(</span><span class="n">io_threads</span><span class="p">)</span>
</span><span id="L-436"><a href="#L-436"><span class="linenos"> 436</span></a> <span class="n">conf</span><span class="o">.</span><span class="n">message_listener_threads</span><span class="p">(</span><span class="n">message_listener_threads</span><span class="p">)</span>
</span><span id="L-437"><a href="#L-437"><span class="linenos"> 437</span></a> <span class="n">conf</span><span class="o">.</span><span class="n">concurrent_lookup_requests</span><span class="p">(</span><span class="n">concurrent_lookup_requests</span><span class="p">)</span>
</span><span id="L-438"><a href="#L-438"><span class="linenos"> 438</span></a> <span class="k">if</span> <span class="n">log_conf_file_path</span><span class="p">:</span>
</span><span id="L-439"><a href="#L-439"><span class="linenos"> 439</span></a> <span class="n">conf</span><span class="o">.</span><span class="n">log_conf_file_path</span><span class="p">(</span><span class="n">log_conf_file_path</span><span class="p">)</span>
</span><span id="L-440"><a href="#L-440"><span class="linenos"> 440</span></a> <span class="k">if</span> <span class="n">logger</span><span class="p">:</span>
</span><span id="L-441"><a href="#L-441"><span class="linenos"> 441</span></a> <span class="n">conf</span><span class="o">.</span><span class="n">set_logger</span><span class="p">(</span><span class="n">logger</span><span class="p">)</span>
</span><span id="L-442"><a href="#L-442"><span class="linenos"> 442</span></a> <span class="k">if</span> <span class="n">use_tls</span> <span class="ow">or</span> <span class="n">service_url</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s1">&#39;pulsar+ssl://&#39;</span><span class="p">)</span> <span class="ow">or</span> <span class="n">service_url</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s1">&#39;https://&#39;</span><span class="p">):</span>
</span><span id="L-443"><a href="#L-443"><span class="linenos"> 443</span></a> <span class="n">conf</span><span class="o">.</span><span class="n">use_tls</span><span class="p">(</span><span class="kc">True</span><span class="p">)</span>
</span><span id="L-444"><a href="#L-444"><span class="linenos"> 444</span></a> <span class="k">if</span> <span class="n">tls_trust_certs_file_path</span><span class="p">:</span>
</span><span id="L-445"><a href="#L-445"><span class="linenos"> 445</span></a> <span class="n">conf</span><span class="o">.</span><span class="n">tls_trust_certs_file_path</span><span class="p">(</span><span class="n">tls_trust_certs_file_path</span><span class="p">)</span>
</span><span id="L-446"><a href="#L-446"><span class="linenos"> 446</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="L-447"><a href="#L-447"><span class="linenos"> 447</span></a> <span class="n">conf</span><span class="o">.</span><span class="n">tls_trust_certs_file_path</span><span class="p">(</span><span class="n">certifi</span><span class="o">.</span><span class="n">where</span><span class="p">())</span>
</span><span id="L-448"><a href="#L-448"><span class="linenos"> 448</span></a> <span class="n">conf</span><span class="o">.</span><span class="n">tls_allow_insecure_connection</span><span class="p">(</span><span class="n">tls_allow_insecure_connection</span><span class="p">)</span>
</span><span id="L-449"><a href="#L-449"><span class="linenos"> 449</span></a> <span class="n">conf</span><span class="o">.</span><span class="n">tls_validate_hostname</span><span class="p">(</span><span class="n">tls_validate_hostname</span><span class="p">)</span>
</span><span id="L-450"><a href="#L-450"><span class="linenos"> 450</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_client</span> <span class="o">=</span> <span class="n">_pulsar</span><span class="o">.</span><span class="n">Client</span><span class="p">(</span><span class="n">service_url</span><span class="p">,</span> <span class="n">conf</span><span class="p">)</span>
</span><span id="L-451"><a href="#L-451"><span class="linenos"> 451</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_consumers</span> <span class="o">=</span> <span class="p">[]</span>
</span><span id="L-452"><a href="#L-452"><span class="linenos"> 452</span></a>
</span><span id="L-453"><a href="#L-453"><span class="linenos"> 453</span></a> <span class="k">def</span> <span class="nf">create_producer</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">topic</span><span class="p">,</span>
</span><span id="L-454"><a href="#L-454"><span class="linenos"> 454</span></a> <span class="n">producer_name</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
</span><span id="L-455"><a href="#L-455"><span class="linenos"> 455</span></a> <span class="n">schema</span><span class="o">=</span><span class="n">schema</span><span class="o">.</span><span class="n">BytesSchema</span><span class="p">(),</span>
</span><span id="L-456"><a href="#L-456"><span class="linenos"> 456</span></a> <span class="n">initial_sequence_id</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
</span><span id="L-457"><a href="#L-457"><span class="linenos"> 457</span></a> <span class="n">send_timeout_millis</span><span class="o">=</span><span class="mi">30000</span><span class="p">,</span>
</span><span id="L-458"><a href="#L-458"><span class="linenos"> 458</span></a> <span class="n">compression_type</span><span class="o">=</span><span class="n">CompressionType</span><span class="o">.</span><span class="n">NONE</span><span class="p">,</span>
</span><span id="L-459"><a href="#L-459"><span class="linenos"> 459</span></a> <span class="n">max_pending_messages</span><span class="o">=</span><span class="mi">1000</span><span class="p">,</span>
</span><span id="L-460"><a href="#L-460"><span class="linenos"> 460</span></a> <span class="n">max_pending_messages_across_partitions</span><span class="o">=</span><span class="mi">50000</span><span class="p">,</span>
</span><span id="L-461"><a href="#L-461"><span class="linenos"> 461</span></a> <span class="n">block_if_queue_full</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
</span><span id="L-462"><a href="#L-462"><span class="linenos"> 462</span></a> <span class="n">batching_enabled</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
</span><span id="L-463"><a href="#L-463"><span class="linenos"> 463</span></a> <span class="n">batching_max_messages</span><span class="o">=</span><span class="mi">1000</span><span class="p">,</span>
</span><span id="L-464"><a href="#L-464"><span class="linenos"> 464</span></a> <span class="n">batching_max_allowed_size_in_bytes</span><span class="o">=</span><span class="mi">128</span><span class="o">*</span><span class="mi">1024</span><span class="p">,</span>
</span><span id="L-465"><a href="#L-465"><span class="linenos"> 465</span></a> <span class="n">batching_max_publish_delay_ms</span><span class="o">=</span><span class="mi">10</span><span class="p">,</span>
</span><span id="L-466"><a href="#L-466"><span class="linenos"> 466</span></a> <span class="n">message_routing_mode</span><span class="o">=</span><span class="n">PartitionsRoutingMode</span><span class="o">.</span><span class="n">RoundRobinDistribution</span><span class="p">,</span>
</span><span id="L-467"><a href="#L-467"><span class="linenos"> 467</span></a> <span class="n">lazy_start_partitioned_producers</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
</span><span id="L-468"><a href="#L-468"><span class="linenos"> 468</span></a> <span class="n">properties</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
</span><span id="L-469"><a href="#L-469"><span class="linenos"> 469</span></a> <span class="n">batching_type</span><span class="o">=</span><span class="n">BatchingType</span><span class="o">.</span><span class="n">Default</span><span class="p">,</span>
</span><span id="L-470"><a href="#L-470"><span class="linenos"> 470</span></a> <span class="n">encryption_key</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
</span><span id="L-471"><a href="#L-471"><span class="linenos"> 471</span></a> <span class="n">crypto_key_reader</span><span class="o">=</span><span class="kc">None</span>
</span><span id="L-472"><a href="#L-472"><span class="linenos"> 472</span></a> <span class="p">):</span>
</span><span id="L-473"><a href="#L-473"><span class="linenos"> 473</span></a> <span class="sd">&quot;&quot;&quot;</span>
</span><span id="L-474"><a href="#L-474"><span class="linenos"> 474</span></a><span class="sd"> Create a new producer on a given topic.</span>
</span><span id="L-475"><a href="#L-475"><span class="linenos"> 475</span></a>
</span><span id="L-476"><a href="#L-476"><span class="linenos"> 476</span></a><span class="sd"> **Args**</span>
</span><span id="L-477"><a href="#L-477"><span class="linenos"> 477</span></a>
</span><span id="L-478"><a href="#L-478"><span class="linenos"> 478</span></a><span class="sd"> * `topic`:</span>
</span><span id="L-479"><a href="#L-479"><span class="linenos"> 479</span></a><span class="sd"> The topic name</span>
</span><span id="L-480"><a href="#L-480"><span class="linenos"> 480</span></a>
</span><span id="L-481"><a href="#L-481"><span class="linenos"> 481</span></a><span class="sd"> **Options**</span>
</span><span id="L-482"><a href="#L-482"><span class="linenos"> 482</span></a>
</span><span id="L-483"><a href="#L-483"><span class="linenos"> 483</span></a><span class="sd"> * `producer_name`:</span>
</span><span id="L-484"><a href="#L-484"><span class="linenos"> 484</span></a><span class="sd"> Specify a name for the producer. If not assigned,</span>
</span><span id="L-485"><a href="#L-485"><span class="linenos"> 485</span></a><span class="sd"> the system will generate a globally unique name which can be accessed</span>
</span><span id="L-486"><a href="#L-486"><span class="linenos"> 486</span></a><span class="sd"> with `Producer.producer_name()`. When specifying a name, it is app to</span>
</span><span id="L-487"><a href="#L-487"><span class="linenos"> 487</span></a><span class="sd"> the user to ensure that, for a given topic, the producer name is unique</span>
</span><span id="L-488"><a href="#L-488"><span class="linenos"> 488</span></a><span class="sd"> across all Pulsar&#39;s clusters.</span>
</span><span id="L-489"><a href="#L-489"><span class="linenos"> 489</span></a><span class="sd"> * `schema`:</span>
</span><span id="L-490"><a href="#L-490"><span class="linenos"> 490</span></a><span class="sd"> Define the schema of the data that will be published by this producer.</span>
</span><span id="L-491"><a href="#L-491"><span class="linenos"> 491</span></a><span class="sd"> The schema will be used for two purposes:</span>
</span><span id="L-492"><a href="#L-492"><span class="linenos"> 492</span></a><span class="sd"> - Validate the data format against the topic defined schema</span>
</span><span id="L-493"><a href="#L-493"><span class="linenos"> 493</span></a><span class="sd"> - Perform serialization/deserialization between data and objects</span>
</span><span id="L-494"><a href="#L-494"><span class="linenos"> 494</span></a><span class="sd"> An example for this parameter would be to pass `schema=JsonSchema(MyRecordClass)`.</span>
</span><span id="L-495"><a href="#L-495"><span class="linenos"> 495</span></a><span class="sd"> * `initial_sequence_id`:</span>
</span><span id="L-496"><a href="#L-496"><span class="linenos"> 496</span></a><span class="sd"> Set the baseline for the sequence ids for messages</span>
</span><span id="L-497"><a href="#L-497"><span class="linenos"> 497</span></a><span class="sd"> published by the producer. First message will be using</span>
</span><span id="L-498"><a href="#L-498"><span class="linenos"> 498</span></a><span class="sd"> `(initialSequenceId + 1)`` as its sequence id and subsequent messages will</span>
</span><span id="L-499"><a href="#L-499"><span class="linenos"> 499</span></a><span class="sd"> be assigned incremental sequence ids, if not otherwise specified.</span>
</span><span id="L-500"><a href="#L-500"><span class="linenos"> 500</span></a><span class="sd"> * `send_timeout_millis`:</span>
</span><span id="L-501"><a href="#L-501"><span class="linenos"> 501</span></a><span class="sd"> If a message is not acknowledged by the server before the</span>
</span><span id="L-502"><a href="#L-502"><span class="linenos"> 502</span></a><span class="sd"> `send_timeout` expires, an error will be reported.</span>
</span><span id="L-503"><a href="#L-503"><span class="linenos"> 503</span></a><span class="sd"> * `compression_type`:</span>
</span><span id="L-504"><a href="#L-504"><span class="linenos"> 504</span></a><span class="sd"> Set the compression type for the producer. By default, message</span>
</span><span id="L-505"><a href="#L-505"><span class="linenos"> 505</span></a><span class="sd"> payloads are not compressed. Supported compression types are</span>
</span><span id="L-506"><a href="#L-506"><span class="linenos"> 506</span></a><span class="sd"> `CompressionType.LZ4`, `CompressionType.ZLib`, `CompressionType.ZSTD` and `CompressionType.SNAPPY`.</span>
</span><span id="L-507"><a href="#L-507"><span class="linenos"> 507</span></a><span class="sd"> ZSTD is supported since Pulsar 2.3. Consumers will need to be at least at that</span>
</span><span id="L-508"><a href="#L-508"><span class="linenos"> 508</span></a><span class="sd"> release in order to be able to receive messages compressed with ZSTD.</span>
</span><span id="L-509"><a href="#L-509"><span class="linenos"> 509</span></a><span class="sd"> SNAPPY is supported since Pulsar 2.4. Consumers will need to be at least at that</span>
</span><span id="L-510"><a href="#L-510"><span class="linenos"> 510</span></a><span class="sd"> release in order to be able to receive messages compressed with SNAPPY.</span>
</span><span id="L-511"><a href="#L-511"><span class="linenos"> 511</span></a><span class="sd"> * `max_pending_messages`:</span>
</span><span id="L-512"><a href="#L-512"><span class="linenos"> 512</span></a><span class="sd"> Set the max size of the queue holding the messages pending to receive</span>
</span><span id="L-513"><a href="#L-513"><span class="linenos"> 513</span></a><span class="sd"> an acknowledgment from the broker.</span>
</span><span id="L-514"><a href="#L-514"><span class="linenos"> 514</span></a><span class="sd"> * `max_pending_messages_across_partitions`:</span>
</span><span id="L-515"><a href="#L-515"><span class="linenos"> 515</span></a><span class="sd"> Set the max size of the queue holding the messages pending to receive</span>
</span><span id="L-516"><a href="#L-516"><span class="linenos"> 516</span></a><span class="sd"> an acknowledgment across partitions from the broker.</span>
</span><span id="L-517"><a href="#L-517"><span class="linenos"> 517</span></a><span class="sd"> * `block_if_queue_full`: Set whether `send_async` operations should</span>
</span><span id="L-518"><a href="#L-518"><span class="linenos"> 518</span></a><span class="sd"> block when the outgoing message queue is full.</span>
</span><span id="L-519"><a href="#L-519"><span class="linenos"> 519</span></a><span class="sd"> * `message_routing_mode`:</span>
</span><span id="L-520"><a href="#L-520"><span class="linenos"> 520</span></a><span class="sd"> Set the message routing mode for the partitioned producer. Default is `PartitionsRoutingMode.RoundRobinDistribution`,</span>
</span><span id="L-521"><a href="#L-521"><span class="linenos"> 521</span></a><span class="sd"> other option is `PartitionsRoutingMode.UseSinglePartition`</span>
</span><span id="L-522"><a href="#L-522"><span class="linenos"> 522</span></a><span class="sd"> * `lazy_start_partitioned_producers`:</span>
</span><span id="L-523"><a href="#L-523"><span class="linenos"> 523</span></a><span class="sd"> This config affects producers of partitioned topics only. It controls whether</span>
</span><span id="L-524"><a href="#L-524"><span class="linenos"> 524</span></a><span class="sd"> producers register and connect immediately to the owner broker of each partition</span>
</span><span id="L-525"><a href="#L-525"><span class="linenos"> 525</span></a><span class="sd"> or start lazily on demand. The internal producer of one partition is always</span>
</span><span id="L-526"><a href="#L-526"><span class="linenos"> 526</span></a><span class="sd"> started eagerly, chosen by the routing policy, but the internal producers of</span>
</span><span id="L-527"><a href="#L-527"><span class="linenos"> 527</span></a><span class="sd"> any additional partitions are started on demand, upon receiving their first</span>
</span><span id="L-528"><a href="#L-528"><span class="linenos"> 528</span></a><span class="sd"> message.</span>
</span><span id="L-529"><a href="#L-529"><span class="linenos"> 529</span></a><span class="sd"> Using this mode can reduce the strain on brokers for topics with large numbers of</span>
</span><span id="L-530"><a href="#L-530"><span class="linenos"> 530</span></a><span class="sd"> partitions and when the SinglePartition routing policy is used without keyed messages.</span>
</span><span id="L-531"><a href="#L-531"><span class="linenos"> 531</span></a><span class="sd"> Because producer connection can be on demand, this can produce extra send latency</span>
</span><span id="L-532"><a href="#L-532"><span class="linenos"> 532</span></a><span class="sd"> for the first messages of a given partition.</span>
</span><span id="L-533"><a href="#L-533"><span class="linenos"> 533</span></a><span class="sd"> * `properties`:</span>
</span><span id="L-534"><a href="#L-534"><span class="linenos"> 534</span></a><span class="sd"> Sets the properties for the producer. The properties associated with a producer</span>
</span><span id="L-535"><a href="#L-535"><span class="linenos"> 535</span></a><span class="sd"> can be used for identify a producer at broker side.</span>
</span><span id="L-536"><a href="#L-536"><span class="linenos"> 536</span></a><span class="sd"> * `batching_type`:</span>
</span><span id="L-537"><a href="#L-537"><span class="linenos"> 537</span></a><span class="sd"> Sets the batching type for the producer.</span>
</span><span id="L-538"><a href="#L-538"><span class="linenos"> 538</span></a><span class="sd"> There are two batching type: DefaultBatching and KeyBasedBatching.</span>
</span><span id="L-539"><a href="#L-539"><span class="linenos"> 539</span></a><span class="sd"> - Default batching</span>
</span><span id="L-540"><a href="#L-540"><span class="linenos"> 540</span></a><span class="sd"> incoming single messages:</span>
</span><span id="L-541"><a href="#L-541"><span class="linenos"> 541</span></a><span class="sd"> (k1, v1), (k2, v1), (k3, v1), (k1, v2), (k2, v2), (k3, v2), (k1, v3), (k2, v3), (k3, v3)</span>
</span><span id="L-542"><a href="#L-542"><span class="linenos"> 542</span></a><span class="sd"> batched into single batch message:</span>
</span><span id="L-543"><a href="#L-543"><span class="linenos"> 543</span></a><span class="sd"> [(k1, v1), (k2, v1), (k3, v1), (k1, v2), (k2, v2), (k3, v2), (k1, v3), (k2, v3), (k3, v3)]</span>
</span><span id="L-544"><a href="#L-544"><span class="linenos"> 544</span></a>
</span><span id="L-545"><a href="#L-545"><span class="linenos"> 545</span></a><span class="sd"> - KeyBasedBatching</span>
</span><span id="L-546"><a href="#L-546"><span class="linenos"> 546</span></a><span class="sd"> incoming single messages:</span>
</span><span id="L-547"><a href="#L-547"><span class="linenos"> 547</span></a><span class="sd"> (k1, v1), (k2, v1), (k3, v1), (k1, v2), (k2, v2), (k3, v2), (k1, v3), (k2, v3), (k3, v3)</span>
</span><span id="L-548"><a href="#L-548"><span class="linenos"> 548</span></a><span class="sd"> batched into single batch message:</span>
</span><span id="L-549"><a href="#L-549"><span class="linenos"> 549</span></a><span class="sd"> [(k1, v1), (k1, v2), (k1, v3)], [(k2, v1), (k2, v2), (k2, v3)], [(k3, v1), (k3, v2), (k3, v3)]</span>
</span><span id="L-550"><a href="#L-550"><span class="linenos"> 550</span></a><span class="sd"> * encryption_key:</span>
</span><span id="L-551"><a href="#L-551"><span class="linenos"> 551</span></a><span class="sd"> The key used for symmetric encryption, configured on the producer side</span>
</span><span id="L-552"><a href="#L-552"><span class="linenos"> 552</span></a><span class="sd"> * crypto_key_reader:</span>
</span><span id="L-553"><a href="#L-553"><span class="linenos"> 553</span></a><span class="sd"> Symmetric encryption class implementation, configuring public key encryption messages for the producer</span>
</span><span id="L-554"><a href="#L-554"><span class="linenos"> 554</span></a><span class="sd"> and private key decryption messages for the consumer</span>
</span><span id="L-555"><a href="#L-555"><span class="linenos"> 555</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="L-556"><a href="#L-556"><span class="linenos"> 556</span></a> <span class="n">_check_type</span><span class="p">(</span><span class="nb">str</span><span class="p">,</span> <span class="n">topic</span><span class="p">,</span> <span class="s1">&#39;topic&#39;</span><span class="p">)</span>
</span><span id="L-557"><a href="#L-557"><span class="linenos"> 557</span></a> <span class="n">_check_type_or_none</span><span class="p">(</span><span class="nb">str</span><span class="p">,</span> <span class="n">producer_name</span><span class="p">,</span> <span class="s1">&#39;producer_name&#39;</span><span class="p">)</span>
</span><span id="L-558"><a href="#L-558"><span class="linenos"> 558</span></a> <span class="n">_check_type</span><span class="p">(</span><span class="n">_schema</span><span class="o">.</span><span class="n">Schema</span><span class="p">,</span> <span class="n">schema</span><span class="p">,</span> <span class="s1">&#39;schema&#39;</span><span class="p">)</span>
</span><span id="L-559"><a href="#L-559"><span class="linenos"> 559</span></a> <span class="n">_check_type_or_none</span><span class="p">(</span><span class="nb">int</span><span class="p">,</span> <span class="n">initial_sequence_id</span><span class="p">,</span> <span class="s1">&#39;initial_sequence_id&#39;</span><span class="p">)</span>
</span><span id="L-560"><a href="#L-560"><span class="linenos"> 560</span></a> <span class="n">_check_type</span><span class="p">(</span><span class="nb">int</span><span class="p">,</span> <span class="n">send_timeout_millis</span><span class="p">,</span> <span class="s1">&#39;send_timeout_millis&#39;</span><span class="p">)</span>
</span><span id="L-561"><a href="#L-561"><span class="linenos"> 561</span></a> <span class="n">_check_type</span><span class="p">(</span><span class="n">CompressionType</span><span class="p">,</span> <span class="n">compression_type</span><span class="p">,</span> <span class="s1">&#39;compression_type&#39;</span><span class="p">)</span>
</span><span id="L-562"><a href="#L-562"><span class="linenos"> 562</span></a> <span class="n">_check_type</span><span class="p">(</span><span class="nb">int</span><span class="p">,</span> <span class="n">max_pending_messages</span><span class="p">,</span> <span class="s1">&#39;max_pending_messages&#39;</span><span class="p">)</span>
</span><span id="L-563"><a href="#L-563"><span class="linenos"> 563</span></a> <span class="n">_check_type</span><span class="p">(</span><span class="nb">int</span><span class="p">,</span> <span class="n">max_pending_messages_across_partitions</span><span class="p">,</span> <span class="s1">&#39;max_pending_messages_across_partitions&#39;</span><span class="p">)</span>
</span><span id="L-564"><a href="#L-564"><span class="linenos"> 564</span></a> <span class="n">_check_type</span><span class="p">(</span><span class="nb">bool</span><span class="p">,</span> <span class="n">block_if_queue_full</span><span class="p">,</span> <span class="s1">&#39;block_if_queue_full&#39;</span><span class="p">)</span>
</span><span id="L-565"><a href="#L-565"><span class="linenos"> 565</span></a> <span class="n">_check_type</span><span class="p">(</span><span class="nb">bool</span><span class="p">,</span> <span class="n">batching_enabled</span><span class="p">,</span> <span class="s1">&#39;batching_enabled&#39;</span><span class="p">)</span>
</span><span id="L-566"><a href="#L-566"><span class="linenos"> 566</span></a> <span class="n">_check_type</span><span class="p">(</span><span class="nb">int</span><span class="p">,</span> <span class="n">batching_max_messages</span><span class="p">,</span> <span class="s1">&#39;batching_max_messages&#39;</span><span class="p">)</span>
</span><span id="L-567"><a href="#L-567"><span class="linenos"> 567</span></a> <span class="n">_check_type</span><span class="p">(</span><span class="nb">int</span><span class="p">,</span> <span class="n">batching_max_allowed_size_in_bytes</span><span class="p">,</span> <span class="s1">&#39;batching_max_allowed_size_in_bytes&#39;</span><span class="p">)</span>
</span><span id="L-568"><a href="#L-568"><span class="linenos"> 568</span></a> <span class="n">_check_type</span><span class="p">(</span><span class="nb">int</span><span class="p">,</span> <span class="n">batching_max_publish_delay_ms</span><span class="p">,</span> <span class="s1">&#39;batching_max_publish_delay_ms&#39;</span><span class="p">)</span>
</span><span id="L-569"><a href="#L-569"><span class="linenos"> 569</span></a> <span class="n">_check_type_or_none</span><span class="p">(</span><span class="nb">dict</span><span class="p">,</span> <span class="n">properties</span><span class="p">,</span> <span class="s1">&#39;properties&#39;</span><span class="p">)</span>
</span><span id="L-570"><a href="#L-570"><span class="linenos"> 570</span></a> <span class="n">_check_type</span><span class="p">(</span><span class="n">BatchingType</span><span class="p">,</span> <span class="n">batching_type</span><span class="p">,</span> <span class="s1">&#39;batching_type&#39;</span><span class="p">)</span>
</span><span id="L-571"><a href="#L-571"><span class="linenos"> 571</span></a> <span class="n">_check_type_or_none</span><span class="p">(</span><span class="nb">str</span><span class="p">,</span> <span class="n">encryption_key</span><span class="p">,</span> <span class="s1">&#39;encryption_key&#39;</span><span class="p">)</span>
</span><span id="L-572"><a href="#L-572"><span class="linenos"> 572</span></a> <span class="n">_check_type_or_none</span><span class="p">(</span><span class="n">CryptoKeyReader</span><span class="p">,</span> <span class="n">crypto_key_reader</span><span class="p">,</span> <span class="s1">&#39;crypto_key_reader&#39;</span><span class="p">)</span>
</span><span id="L-573"><a href="#L-573"><span class="linenos"> 573</span></a> <span class="n">_check_type</span><span class="p">(</span><span class="nb">bool</span><span class="p">,</span> <span class="n">lazy_start_partitioned_producers</span><span class="p">,</span> <span class="s1">&#39;lazy_start_partitioned_producers&#39;</span><span class="p">)</span>
</span><span id="L-574"><a href="#L-574"><span class="linenos"> 574</span></a>
</span><span id="L-575"><a href="#L-575"><span class="linenos"> 575</span></a> <span class="n">conf</span> <span class="o">=</span> <span class="n">_pulsar</span><span class="o">.</span><span class="n">ProducerConfiguration</span><span class="p">()</span>
</span><span id="L-576"><a href="#L-576"><span class="linenos"> 576</span></a> <span class="n">conf</span><span class="o">.</span><span class="n">send_timeout_millis</span><span class="p">(</span><span class="n">send_timeout_millis</span><span class="p">)</span>
</span><span id="L-577"><a href="#L-577"><span class="linenos"> 577</span></a> <span class="n">conf</span><span class="o">.</span><span class="n">compression_type</span><span class="p">(</span><span class="n">compression_type</span><span class="p">)</span>
</span><span id="L-578"><a href="#L-578"><span class="linenos"> 578</span></a> <span class="n">conf</span><span class="o">.</span><span class="n">max_pending_messages</span><span class="p">(</span><span class="n">max_pending_messages</span><span class="p">)</span>
</span><span id="L-579"><a href="#L-579"><span class="linenos"> 579</span></a> <span class="n">conf</span><span class="o">.</span><span class="n">max_pending_messages_across_partitions</span><span class="p">(</span><span class="n">max_pending_messages_across_partitions</span><span class="p">)</span>
</span><span id="L-580"><a href="#L-580"><span class="linenos"> 580</span></a> <span class="n">conf</span><span class="o">.</span><span class="n">block_if_queue_full</span><span class="p">(</span><span class="n">block_if_queue_full</span><span class="p">)</span>
</span><span id="L-581"><a href="#L-581"><span class="linenos"> 581</span></a> <span class="n">conf</span><span class="o">.</span><span class="n">batching_enabled</span><span class="p">(</span><span class="n">batching_enabled</span><span class="p">)</span>
</span><span id="L-582"><a href="#L-582"><span class="linenos"> 582</span></a> <span class="n">conf</span><span class="o">.</span><span class="n">batching_max_messages</span><span class="p">(</span><span class="n">batching_max_messages</span><span class="p">)</span>
</span><span id="L-583"><a href="#L-583"><span class="linenos"> 583</span></a> <span class="n">conf</span><span class="o">.</span><span class="n">batching_max_allowed_size_in_bytes</span><span class="p">(</span><span class="n">batching_max_allowed_size_in_bytes</span><span class="p">)</span>
</span><span id="L-584"><a href="#L-584"><span class="linenos"> 584</span></a> <span class="n">conf</span><span class="o">.</span><span class="n">batching_max_publish_delay_ms</span><span class="p">(</span><span class="n">batching_max_publish_delay_ms</span><span class="p">)</span>
</span><span id="L-585"><a href="#L-585"><span class="linenos"> 585</span></a> <span class="n">conf</span><span class="o">.</span><span class="n">partitions_routing_mode</span><span class="p">(</span><span class="n">message_routing_mode</span><span class="p">)</span>
</span><span id="L-586"><a href="#L-586"><span class="linenos"> 586</span></a> <span class="n">conf</span><span class="o">.</span><span class="n">batching_type</span><span class="p">(</span><span class="n">batching_type</span><span class="p">)</span>
</span><span id="L-587"><a href="#L-587"><span class="linenos"> 587</span></a> <span class="n">conf</span><span class="o">.</span><span class="n">lazy_start_partitioned_producers</span><span class="p">(</span><span class="n">lazy_start_partitioned_producers</span><span class="p">)</span>
</span><span id="L-588"><a href="#L-588"><span class="linenos"> 588</span></a> <span class="k">if</span> <span class="n">producer_name</span><span class="p">:</span>
</span><span id="L-589"><a href="#L-589"><span class="linenos"> 589</span></a> <span class="n">conf</span><span class="o">.</span><span class="n">producer_name</span><span class="p">(</span><span class="n">producer_name</span><span class="p">)</span>
</span><span id="L-590"><a href="#L-590"><span class="linenos"> 590</span></a> <span class="k">if</span> <span class="n">initial_sequence_id</span><span class="p">:</span>
</span><span id="L-591"><a href="#L-591"><span class="linenos"> 591</span></a> <span class="n">conf</span><span class="o">.</span><span class="n">initial_sequence_id</span><span class="p">(</span><span class="n">initial_sequence_id</span><span class="p">)</span>
</span><span id="L-592"><a href="#L-592"><span class="linenos"> 592</span></a> <span class="k">if</span> <span class="n">properties</span><span class="p">:</span>
</span><span id="L-593"><a href="#L-593"><span class="linenos"> 593</span></a> <span class="k">for</span> <span class="n">k</span><span class="p">,</span> <span class="n">v</span> <span class="ow">in</span> <span class="n">properties</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
</span><span id="L-594"><a href="#L-594"><span class="linenos"> 594</span></a> <span class="n">conf</span><span class="o">.</span><span class="n">property</span><span class="p">(</span><span class="n">k</span><span class="p">,</span> <span class="n">v</span><span class="p">)</span>
</span><span id="L-595"><a href="#L-595"><span class="linenos"> 595</span></a>
</span><span id="L-596"><a href="#L-596"><span class="linenos"> 596</span></a> <span class="n">conf</span><span class="o">.</span><span class="n">schema</span><span class="p">(</span><span class="n">schema</span><span class="o">.</span><span class="n">schema_info</span><span class="p">())</span>
</span><span id="L-597"><a href="#L-597"><span class="linenos"> 597</span></a> <span class="k">if</span> <span class="n">encryption_key</span><span class="p">:</span>
</span><span id="L-598"><a href="#L-598"><span class="linenos"> 598</span></a> <span class="n">conf</span><span class="o">.</span><span class="n">encryption_key</span><span class="p">(</span><span class="n">encryption_key</span><span class="p">)</span>
</span><span id="L-599"><a href="#L-599"><span class="linenos"> 599</span></a> <span class="k">if</span> <span class="n">crypto_key_reader</span><span class="p">:</span>
</span><span id="L-600"><a href="#L-600"><span class="linenos"> 600</span></a> <span class="n">conf</span><span class="o">.</span><span class="n">crypto_key_reader</span><span class="p">(</span><span class="n">crypto_key_reader</span><span class="o">.</span><span class="n">cryptoKeyReader</span><span class="p">)</span>
</span><span id="L-601"><a href="#L-601"><span class="linenos"> 601</span></a>
</span><span id="L-602"><a href="#L-602"><span class="linenos"> 602</span></a> <span class="n">p</span> <span class="o">=</span> <span class="n">Producer</span><span class="p">()</span>
</span><span id="L-603"><a href="#L-603"><span class="linenos"> 603</span></a> <span class="n">p</span><span class="o">.</span><span class="n">_producer</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_client</span><span class="o">.</span><span class="n">create_producer</span><span class="p">(</span><span class="n">topic</span><span class="p">,</span> <span class="n">conf</span><span class="p">)</span>
</span><span id="L-604"><a href="#L-604"><span class="linenos"> 604</span></a> <span class="n">p</span><span class="o">.</span><span class="n">_schema</span> <span class="o">=</span> <span class="n">schema</span>
</span><span id="L-605"><a href="#L-605"><span class="linenos"> 605</span></a> <span class="n">p</span><span class="o">.</span><span class="n">_client</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_client</span>
</span><span id="L-606"><a href="#L-606"><span class="linenos"> 606</span></a> <span class="k">return</span> <span class="n">p</span>
</span><span id="L-607"><a href="#L-607"><span class="linenos"> 607</span></a>
</span><span id="L-608"><a href="#L-608"><span class="linenos"> 608</span></a> <span class="k">def</span> <span class="nf">subscribe</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">topic</span><span class="p">,</span> <span class="n">subscription_name</span><span class="p">,</span>
</span><span id="L-609"><a href="#L-609"><span class="linenos"> 609</span></a> <span class="n">consumer_type</span><span class="o">=</span><span class="n">ConsumerType</span><span class="o">.</span><span class="n">Exclusive</span><span class="p">,</span>
</span><span id="L-610"><a href="#L-610"><span class="linenos"> 610</span></a> <span class="n">schema</span><span class="o">=</span><span class="n">schema</span><span class="o">.</span><span class="n">BytesSchema</span><span class="p">(),</span>
</span><span id="L-611"><a href="#L-611"><span class="linenos"> 611</span></a> <span class="n">message_listener</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
</span><span id="L-612"><a href="#L-612"><span class="linenos"> 612</span></a> <span class="n">receiver_queue_size</span><span class="o">=</span><span class="mi">1000</span><span class="p">,</span>
</span><span id="L-613"><a href="#L-613"><span class="linenos"> 613</span></a> <span class="n">max_total_receiver_queue_size_across_partitions</span><span class="o">=</span><span class="mi">50000</span><span class="p">,</span>
</span><span id="L-614"><a href="#L-614"><span class="linenos"> 614</span></a> <span class="n">consumer_name</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
</span><span id="L-615"><a href="#L-615"><span class="linenos"> 615</span></a> <span class="n">unacked_messages_timeout_ms</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
</span><span id="L-616"><a href="#L-616"><span class="linenos"> 616</span></a> <span class="n">broker_consumer_stats_cache_time_ms</span><span class="o">=</span><span class="mi">30000</span><span class="p">,</span>
</span><span id="L-617"><a href="#L-617"><span class="linenos"> 617</span></a> <span class="n">negative_ack_redelivery_delay_ms</span><span class="o">=</span><span class="mi">60000</span><span class="p">,</span>
</span><span id="L-618"><a href="#L-618"><span class="linenos"> 618</span></a> <span class="n">is_read_compacted</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
</span><span id="L-619"><a href="#L-619"><span class="linenos"> 619</span></a> <span class="n">properties</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
</span><span id="L-620"><a href="#L-620"><span class="linenos"> 620</span></a> <span class="n">pattern_auto_discovery_period</span><span class="o">=</span><span class="mi">60</span><span class="p">,</span>
</span><span id="L-621"><a href="#L-621"><span class="linenos"> 621</span></a> <span class="n">initial_position</span><span class="o">=</span><span class="n">InitialPosition</span><span class="o">.</span><span class="n">Latest</span><span class="p">,</span>
</span><span id="L-622"><a href="#L-622"><span class="linenos"> 622</span></a> <span class="n">crypto_key_reader</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
</span><span id="L-623"><a href="#L-623"><span class="linenos"> 623</span></a> <span class="n">replicate_subscription_state_enabled</span><span class="o">=</span><span class="kc">False</span>
</span><span id="L-624"><a href="#L-624"><span class="linenos"> 624</span></a> <span class="p">):</span>
</span><span id="L-625"><a href="#L-625"><span class="linenos"> 625</span></a> <span class="sd">&quot;&quot;&quot;</span>
</span><span id="L-626"><a href="#L-626"><span class="linenos"> 626</span></a><span class="sd"> Subscribe to the given topic and subscription combination.</span>
</span><span id="L-627"><a href="#L-627"><span class="linenos"> 627</span></a>
</span><span id="L-628"><a href="#L-628"><span class="linenos"> 628</span></a><span class="sd"> **Args**</span>
</span><span id="L-629"><a href="#L-629"><span class="linenos"> 629</span></a>
</span><span id="L-630"><a href="#L-630"><span class="linenos"> 630</span></a><span class="sd"> * `topic`: The name of the topic, list of topics or regex pattern.</span>
</span><span id="L-631"><a href="#L-631"><span class="linenos"> 631</span></a><span class="sd"> This method will accept these forms:</span>
</span><span id="L-632"><a href="#L-632"><span class="linenos"> 632</span></a><span class="sd"> - `topic=&#39;my-topic&#39;`</span>
</span><span id="L-633"><a href="#L-633"><span class="linenos"> 633</span></a><span class="sd"> - `topic=[&#39;topic-1&#39;, &#39;topic-2&#39;, &#39;topic-3&#39;]`</span>
</span><span id="L-634"><a href="#L-634"><span class="linenos"> 634</span></a><span class="sd"> - `topic=re.compile(&#39;persistent://public/default/topic-*&#39;)`</span>
</span><span id="L-635"><a href="#L-635"><span class="linenos"> 635</span></a><span class="sd"> * `subscription`: The name of the subscription.</span>
</span><span id="L-636"><a href="#L-636"><span class="linenos"> 636</span></a>
</span><span id="L-637"><a href="#L-637"><span class="linenos"> 637</span></a><span class="sd"> **Options**</span>
</span><span id="L-638"><a href="#L-638"><span class="linenos"> 638</span></a>
</span><span id="L-639"><a href="#L-639"><span class="linenos"> 639</span></a><span class="sd"> * `consumer_type`:</span>
</span><span id="L-640"><a href="#L-640"><span class="linenos"> 640</span></a><span class="sd"> Select the subscription type to be used when subscribing to the topic.</span>
</span><span id="L-641"><a href="#L-641"><span class="linenos"> 641</span></a><span class="sd"> * `schema`:</span>
</span><span id="L-642"><a href="#L-642"><span class="linenos"> 642</span></a><span class="sd"> Define the schema of the data that will be received by this consumer.</span>
</span><span id="L-643"><a href="#L-643"><span class="linenos"> 643</span></a><span class="sd"> * `message_listener`:</span>
</span><span id="L-644"><a href="#L-644"><span class="linenos"> 644</span></a><span class="sd"> Sets a message listener for the consumer. When the listener is set,</span>
</span><span id="L-645"><a href="#L-645"><span class="linenos"> 645</span></a><span class="sd"> the application will receive messages through it. Calls to</span>
</span><span id="L-646"><a href="#L-646"><span class="linenos"> 646</span></a><span class="sd"> `consumer.receive()` will not be allowed. The listener function needs</span>
</span><span id="L-647"><a href="#L-647"><span class="linenos"> 647</span></a><span class="sd"> to accept (consumer, message), for example:</span>
</span><span id="L-648"><a href="#L-648"><span class="linenos"> 648</span></a>
</span><span id="L-649"><a href="#L-649"><span class="linenos"> 649</span></a><span class="sd"> #!python</span>
</span><span id="L-650"><a href="#L-650"><span class="linenos"> 650</span></a><span class="sd"> def my_listener(consumer, message):</span>
</span><span id="L-651"><a href="#L-651"><span class="linenos"> 651</span></a><span class="sd"> # process message</span>
</span><span id="L-652"><a href="#L-652"><span class="linenos"> 652</span></a><span class="sd"> consumer.acknowledge(message)</span>
</span><span id="L-653"><a href="#L-653"><span class="linenos"> 653</span></a>
</span><span id="L-654"><a href="#L-654"><span class="linenos"> 654</span></a><span class="sd"> * `receiver_queue_size`:</span>
</span><span id="L-655"><a href="#L-655"><span class="linenos"> 655</span></a><span class="sd"> Sets the size of the consumer receive queue. The consumer receive</span>
</span><span id="L-656"><a href="#L-656"><span class="linenos"> 656</span></a><span class="sd"> queue controls how many messages can be accumulated by the consumer</span>
</span><span id="L-657"><a href="#L-657"><span class="linenos"> 657</span></a><span class="sd"> before the application calls `receive()`. Using a higher value could</span>
</span><span id="L-658"><a href="#L-658"><span class="linenos"> 658</span></a><span class="sd"> potentially increase the consumer throughput at the expense of higher</span>
</span><span id="L-659"><a href="#L-659"><span class="linenos"> 659</span></a><span class="sd"> memory utilization. Setting the consumer queue size to zero decreases</span>
</span><span id="L-660"><a href="#L-660"><span class="linenos"> 660</span></a><span class="sd"> the throughput of the consumer by disabling pre-fetching of messages.</span>
</span><span id="L-661"><a href="#L-661"><span class="linenos"> 661</span></a><span class="sd"> This approach improves the message distribution on shared subscription</span>
</span><span id="L-662"><a href="#L-662"><span class="linenos"> 662</span></a><span class="sd"> by pushing messages only to those consumers that are ready to process</span>
</span><span id="L-663"><a href="#L-663"><span class="linenos"> 663</span></a><span class="sd"> them. Neither receive with timeout nor partitioned topics can be used</span>
</span><span id="L-664"><a href="#L-664"><span class="linenos"> 664</span></a><span class="sd"> if the consumer queue size is zero. The `receive()` function call</span>
</span><span id="L-665"><a href="#L-665"><span class="linenos"> 665</span></a><span class="sd"> should not be interrupted when the consumer queue size is zero. The</span>
</span><span id="L-666"><a href="#L-666"><span class="linenos"> 666</span></a><span class="sd"> default value is 1000 messages and should work well for most use</span>
</span><span id="L-667"><a href="#L-667"><span class="linenos"> 667</span></a><span class="sd"> cases.</span>
</span><span id="L-668"><a href="#L-668"><span class="linenos"> 668</span></a><span class="sd"> * `max_total_receiver_queue_size_across_partitions`</span>
</span><span id="L-669"><a href="#L-669"><span class="linenos"> 669</span></a><span class="sd"> Set the max total receiver queue size across partitions.</span>
</span><span id="L-670"><a href="#L-670"><span class="linenos"> 670</span></a><span class="sd"> This setting will be used to reduce the receiver queue size for individual partitions</span>
</span><span id="L-671"><a href="#L-671"><span class="linenos"> 671</span></a><span class="sd"> * `consumer_name`:</span>
</span><span id="L-672"><a href="#L-672"><span class="linenos"> 672</span></a><span class="sd"> Sets the consumer name.</span>
</span><span id="L-673"><a href="#L-673"><span class="linenos"> 673</span></a><span class="sd"> * `unacked_messages_timeout_ms`:</span>
</span><span id="L-674"><a href="#L-674"><span class="linenos"> 674</span></a><span class="sd"> Sets the timeout in milliseconds for unacknowledged messages. The</span>
</span><span id="L-675"><a href="#L-675"><span class="linenos"> 675</span></a><span class="sd"> timeout needs to be greater than 10 seconds. An exception is thrown if</span>
</span><span id="L-676"><a href="#L-676"><span class="linenos"> 676</span></a><span class="sd"> the given value is less than 10 seconds. If a successful</span>
</span><span id="L-677"><a href="#L-677"><span class="linenos"> 677</span></a><span class="sd"> acknowledgement is not sent within the timeout, all the unacknowledged</span>
</span><span id="L-678"><a href="#L-678"><span class="linenos"> 678</span></a><span class="sd"> messages are redelivered.</span>
</span><span id="L-679"><a href="#L-679"><span class="linenos"> 679</span></a><span class="sd"> * `negative_ack_redelivery_delay_ms`:</span>
</span><span id="L-680"><a href="#L-680"><span class="linenos"> 680</span></a><span class="sd"> The delay after which to redeliver the messages that failed to be</span>
</span><span id="L-681"><a href="#L-681"><span class="linenos"> 681</span></a><span class="sd"> processed (with the `consumer.negative_acknowledge()`)</span>
</span><span id="L-682"><a href="#L-682"><span class="linenos"> 682</span></a><span class="sd"> * `broker_consumer_stats_cache_time_ms`:</span>
</span><span id="L-683"><a href="#L-683"><span class="linenos"> 683</span></a><span class="sd"> Sets the time duration for which the broker-side consumer stats will</span>
</span><span id="L-684"><a href="#L-684"><span class="linenos"> 684</span></a><span class="sd"> be cached in the client.</span>
</span><span id="L-685"><a href="#L-685"><span class="linenos"> 685</span></a><span class="sd"> * `is_read_compacted`:</span>
</span><span id="L-686"><a href="#L-686"><span class="linenos"> 686</span></a><span class="sd"> Selects whether to read the compacted version of the topic</span>
</span><span id="L-687"><a href="#L-687"><span class="linenos"> 687</span></a><span class="sd"> * `properties`:</span>
</span><span id="L-688"><a href="#L-688"><span class="linenos"> 688</span></a><span class="sd"> Sets the properties for the consumer. The properties associated with a consumer</span>
</span><span id="L-689"><a href="#L-689"><span class="linenos"> 689</span></a><span class="sd"> can be used for identify a consumer at broker side.</span>
</span><span id="L-690"><a href="#L-690"><span class="linenos"> 690</span></a><span class="sd"> * `pattern_auto_discovery_period`:</span>
</span><span id="L-691"><a href="#L-691"><span class="linenos"> 691</span></a><span class="sd"> Periods of seconds for consumer to auto discover match topics.</span>
</span><span id="L-692"><a href="#L-692"><span class="linenos"> 692</span></a><span class="sd"> * `initial_position`:</span>
</span><span id="L-693"><a href="#L-693"><span class="linenos"> 693</span></a><span class="sd"> Set the initial position of a consumer when subscribing to the topic.</span>
</span><span id="L-694"><a href="#L-694"><span class="linenos"> 694</span></a><span class="sd"> It could be either: `InitialPosition.Earliest` or `InitialPosition.Latest`.</span>
</span><span id="L-695"><a href="#L-695"><span class="linenos"> 695</span></a><span class="sd"> Default: `Latest`.</span>
</span><span id="L-696"><a href="#L-696"><span class="linenos"> 696</span></a><span class="sd"> * crypto_key_reader:</span>
</span><span id="L-697"><a href="#L-697"><span class="linenos"> 697</span></a><span class="sd"> Symmetric encryption class implementation, configuring public key encryption messages for the producer</span>
</span><span id="L-698"><a href="#L-698"><span class="linenos"> 698</span></a><span class="sd"> and private key decryption messages for the consumer</span>
</span><span id="L-699"><a href="#L-699"><span class="linenos"> 699</span></a><span class="sd"> * replicate_subscription_state_enabled:</span>
</span><span id="L-700"><a href="#L-700"><span class="linenos"> 700</span></a><span class="sd"> Set whether the subscription status should be replicated.</span>
</span><span id="L-701"><a href="#L-701"><span class="linenos"> 701</span></a><span class="sd"> Default: `False`.</span>
</span><span id="L-702"><a href="#L-702"><span class="linenos"> 702</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="L-703"><a href="#L-703"><span class="linenos"> 703</span></a> <span class="n">_check_type</span><span class="p">(</span><span class="nb">str</span><span class="p">,</span> <span class="n">subscription_name</span><span class="p">,</span> <span class="s1">&#39;subscription_name&#39;</span><span class="p">)</span>
</span><span id="L-704"><a href="#L-704"><span class="linenos"> 704</span></a> <span class="n">_check_type</span><span class="p">(</span><span class="n">ConsumerType</span><span class="p">,</span> <span class="n">consumer_type</span><span class="p">,</span> <span class="s1">&#39;consumer_type&#39;</span><span class="p">)</span>
</span><span id="L-705"><a href="#L-705"><span class="linenos"> 705</span></a> <span class="n">_check_type</span><span class="p">(</span><span class="n">_schema</span><span class="o">.</span><span class="n">Schema</span><span class="p">,</span> <span class="n">schema</span><span class="p">,</span> <span class="s1">&#39;schema&#39;</span><span class="p">)</span>
</span><span id="L-706"><a href="#L-706"><span class="linenos"> 706</span></a> <span class="n">_check_type</span><span class="p">(</span><span class="nb">int</span><span class="p">,</span> <span class="n">receiver_queue_size</span><span class="p">,</span> <span class="s1">&#39;receiver_queue_size&#39;</span><span class="p">)</span>
</span><span id="L-707"><a href="#L-707"><span class="linenos"> 707</span></a> <span class="n">_check_type</span><span class="p">(</span><span class="nb">int</span><span class="p">,</span> <span class="n">max_total_receiver_queue_size_across_partitions</span><span class="p">,</span>
</span><span id="L-708"><a href="#L-708"><span class="linenos"> 708</span></a> <span class="s1">&#39;max_total_receiver_queue_size_across_partitions&#39;</span><span class="p">)</span>
</span><span id="L-709"><a href="#L-709"><span class="linenos"> 709</span></a> <span class="n">_check_type_or_none</span><span class="p">(</span><span class="nb">str</span><span class="p">,</span> <span class="n">consumer_name</span><span class="p">,</span> <span class="s1">&#39;consumer_name&#39;</span><span class="p">)</span>
</span><span id="L-710"><a href="#L-710"><span class="linenos"> 710</span></a> <span class="n">_check_type_or_none</span><span class="p">(</span><span class="nb">int</span><span class="p">,</span> <span class="n">unacked_messages_timeout_ms</span><span class="p">,</span> <span class="s1">&#39;unacked_messages_timeout_ms&#39;</span><span class="p">)</span>
</span><span id="L-711"><a href="#L-711"><span class="linenos"> 711</span></a> <span class="n">_check_type</span><span class="p">(</span><span class="nb">int</span><span class="p">,</span> <span class="n">broker_consumer_stats_cache_time_ms</span><span class="p">,</span> <span class="s1">&#39;broker_consumer_stats_cache_time_ms&#39;</span><span class="p">)</span>
</span><span id="L-712"><a href="#L-712"><span class="linenos"> 712</span></a> <span class="n">_check_type</span><span class="p">(</span><span class="nb">int</span><span class="p">,</span> <span class="n">negative_ack_redelivery_delay_ms</span><span class="p">,</span> <span class="s1">&#39;negative_ack_redelivery_delay_ms&#39;</span><span class="p">)</span>
</span><span id="L-713"><a href="#L-713"><span class="linenos"> 713</span></a> <span class="n">_check_type</span><span class="p">(</span><span class="nb">int</span><span class="p">,</span> <span class="n">pattern_auto_discovery_period</span><span class="p">,</span> <span class="s1">&#39;pattern_auto_discovery_period&#39;</span><span class="p">)</span>
</span><span id="L-714"><a href="#L-714"><span class="linenos"> 714</span></a> <span class="n">_check_type</span><span class="p">(</span><span class="nb">bool</span><span class="p">,</span> <span class="n">is_read_compacted</span><span class="p">,</span> <span class="s1">&#39;is_read_compacted&#39;</span><span class="p">)</span>
</span><span id="L-715"><a href="#L-715"><span class="linenos"> 715</span></a> <span class="n">_check_type_or_none</span><span class="p">(</span><span class="nb">dict</span><span class="p">,</span> <span class="n">properties</span><span class="p">,</span> <span class="s1">&#39;properties&#39;</span><span class="p">)</span>
</span><span id="L-716"><a href="#L-716"><span class="linenos"> 716</span></a> <span class="n">_check_type</span><span class="p">(</span><span class="n">InitialPosition</span><span class="p">,</span> <span class="n">initial_position</span><span class="p">,</span> <span class="s1">&#39;initial_position&#39;</span><span class="p">)</span>
</span><span id="L-717"><a href="#L-717"><span class="linenos"> 717</span></a> <span class="n">_check_type_or_none</span><span class="p">(</span><span class="n">CryptoKeyReader</span><span class="p">,</span> <span class="n">crypto_key_reader</span><span class="p">,</span> <span class="s1">&#39;crypto_key_reader&#39;</span><span class="p">)</span>
</span><span id="L-718"><a href="#L-718"><span class="linenos"> 718</span></a>
</span><span id="L-719"><a href="#L-719"><span class="linenos"> 719</span></a> <span class="n">conf</span> <span class="o">=</span> <span class="n">_pulsar</span><span class="o">.</span><span class="n">ConsumerConfiguration</span><span class="p">()</span>
</span><span id="L-720"><a href="#L-720"><span class="linenos"> 720</span></a> <span class="n">conf</span><span class="o">.</span><span class="n">consumer_type</span><span class="p">(</span><span class="n">consumer_type</span><span class="p">)</span>
</span><span id="L-721"><a href="#L-721"><span class="linenos"> 721</span></a> <span class="n">conf</span><span class="o">.</span><span class="n">read_compacted</span><span class="p">(</span><span class="n">is_read_compacted</span><span class="p">)</span>
</span><span id="L-722"><a href="#L-722"><span class="linenos"> 722</span></a> <span class="k">if</span> <span class="n">message_listener</span><span class="p">:</span>
</span><span id="L-723"><a href="#L-723"><span class="linenos"> 723</span></a> <span class="n">conf</span><span class="o">.</span><span class="n">message_listener</span><span class="p">(</span><span class="n">_listener_wrapper</span><span class="p">(</span><span class="n">message_listener</span><span class="p">,</span> <span class="n">schema</span><span class="p">))</span>
</span><span id="L-724"><a href="#L-724"><span class="linenos"> 724</span></a> <span class="n">conf</span><span class="o">.</span><span class="n">receiver_queue_size</span><span class="p">(</span><span class="n">receiver_queue_size</span><span class="p">)</span>
</span><span id="L-725"><a href="#L-725"><span class="linenos"> 725</span></a> <span class="n">conf</span><span class="o">.</span><span class="n">max_total_receiver_queue_size_across_partitions</span><span class="p">(</span><span class="n">max_total_receiver_queue_size_across_partitions</span><span class="p">)</span>
</span><span id="L-726"><a href="#L-726"><span class="linenos"> 726</span></a> <span class="k">if</span> <span class="n">consumer_name</span><span class="p">:</span>
</span><span id="L-727"><a href="#L-727"><span class="linenos"> 727</span></a> <span class="n">conf</span><span class="o">.</span><span class="n">consumer_name</span><span class="p">(</span><span class="n">consumer_name</span><span class="p">)</span>
</span><span id="L-728"><a href="#L-728"><span class="linenos"> 728</span></a> <span class="k">if</span> <span class="n">unacked_messages_timeout_ms</span><span class="p">:</span>
</span><span id="L-729"><a href="#L-729"><span class="linenos"> 729</span></a> <span class="n">conf</span><span class="o">.</span><span class="n">unacked_messages_timeout_ms</span><span class="p">(</span><span class="n">unacked_messages_timeout_ms</span><span class="p">)</span>
</span><span id="L-730"><a href="#L-730"><span class="linenos"> 730</span></a>
</span><span id="L-731"><a href="#L-731"><span class="linenos"> 731</span></a> <span class="n">conf</span><span class="o">.</span><span class="n">negative_ack_redelivery_delay_ms</span><span class="p">(</span><span class="n">negative_ack_redelivery_delay_ms</span><span class="p">)</span>
</span><span id="L-732"><a href="#L-732"><span class="linenos"> 732</span></a> <span class="n">conf</span><span class="o">.</span><span class="n">broker_consumer_stats_cache_time_ms</span><span class="p">(</span><span class="n">broker_consumer_stats_cache_time_ms</span><span class="p">)</span>
</span><span id="L-733"><a href="#L-733"><span class="linenos"> 733</span></a> <span class="k">if</span> <span class="n">properties</span><span class="p">:</span>
</span><span id="L-734"><a href="#L-734"><span class="linenos"> 734</span></a> <span class="k">for</span> <span class="n">k</span><span class="p">,</span> <span class="n">v</span> <span class="ow">in</span> <span class="n">properties</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
</span><span id="L-735"><a href="#L-735"><span class="linenos"> 735</span></a> <span class="n">conf</span><span class="o">.</span><span class="n">property</span><span class="p">(</span><span class="n">k</span><span class="p">,</span> <span class="n">v</span><span class="p">)</span>
</span><span id="L-736"><a href="#L-736"><span class="linenos"> 736</span></a> <span class="n">conf</span><span class="o">.</span><span class="n">subscription_initial_position</span><span class="p">(</span><span class="n">initial_position</span><span class="p">)</span>
</span><span id="L-737"><a href="#L-737"><span class="linenos"> 737</span></a>
</span><span id="L-738"><a href="#L-738"><span class="linenos"> 738</span></a> <span class="n">conf</span><span class="o">.</span><span class="n">schema</span><span class="p">(</span><span class="n">schema</span><span class="o">.</span><span class="n">schema_info</span><span class="p">())</span>
</span><span id="L-739"><a href="#L-739"><span class="linenos"> 739</span></a>
</span><span id="L-740"><a href="#L-740"><span class="linenos"> 740</span></a> <span class="k">if</span> <span class="n">crypto_key_reader</span><span class="p">:</span>
</span><span id="L-741"><a href="#L-741"><span class="linenos"> 741</span></a> <span class="n">conf</span><span class="o">.</span><span class="n">crypto_key_reader</span><span class="p">(</span><span class="n">crypto_key_reader</span><span class="o">.</span><span class="n">cryptoKeyReader</span><span class="p">)</span>
</span><span id="L-742"><a href="#L-742"><span class="linenos"> 742</span></a>
</span><span id="L-743"><a href="#L-743"><span class="linenos"> 743</span></a> <span class="n">conf</span><span class="o">.</span><span class="n">replicate_subscription_state_enabled</span><span class="p">(</span><span class="n">replicate_subscription_state_enabled</span><span class="p">)</span>
</span><span id="L-744"><a href="#L-744"><span class="linenos"> 744</span></a>
</span><span id="L-745"><a href="#L-745"><span class="linenos"> 745</span></a> <span class="n">c</span> <span class="o">=</span> <span class="n">Consumer</span><span class="p">()</span>
</span><span id="L-746"><a href="#L-746"><span class="linenos"> 746</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">topic</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span>
</span><span id="L-747"><a href="#L-747"><span class="linenos"> 747</span></a> <span class="c1"># Single topic</span>
</span><span id="L-748"><a href="#L-748"><span class="linenos"> 748</span></a> <span class="n">c</span><span class="o">.</span><span class="n">_consumer</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_client</span><span class="o">.</span><span class="n">subscribe</span><span class="p">(</span><span class="n">topic</span><span class="p">,</span> <span class="n">subscription_name</span><span class="p">,</span> <span class="n">conf</span><span class="p">)</span>
</span><span id="L-749"><a href="#L-749"><span class="linenos"> 749</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">topic</span><span class="p">,</span> <span class="nb">list</span><span class="p">):</span>
</span><span id="L-750"><a href="#L-750"><span class="linenos"> 750</span></a> <span class="c1"># List of topics</span>
</span><span id="L-751"><a href="#L-751"><span class="linenos"> 751</span></a> <span class="n">c</span><span class="o">.</span><span class="n">_consumer</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_client</span><span class="o">.</span><span class="n">subscribe_topics</span><span class="p">(</span><span class="n">topic</span><span class="p">,</span> <span class="n">subscription_name</span><span class="p">,</span> <span class="n">conf</span><span class="p">)</span>
</span><span id="L-752"><a href="#L-752"><span class="linenos"> 752</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">topic</span><span class="p">,</span> <span class="n">_retype</span><span class="p">):</span>
</span><span id="L-753"><a href="#L-753"><span class="linenos"> 753</span></a> <span class="c1"># Regex pattern</span>
</span><span id="L-754"><a href="#L-754"><span class="linenos"> 754</span></a> <span class="n">c</span><span class="o">.</span><span class="n">_consumer</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_client</span><span class="o">.</span><span class="n">subscribe_pattern</span><span class="p">(</span><span class="n">topic</span><span class="o">.</span><span class="n">pattern</span><span class="p">,</span> <span class="n">subscription_name</span><span class="p">,</span> <span class="n">conf</span><span class="p">)</span>
</span><span id="L-755"><a href="#L-755"><span class="linenos"> 755</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="L-756"><a href="#L-756"><span class="linenos"> 756</span></a> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">&quot;Argument &#39;topic&#39; is expected to be of a type between (str, list, re.pattern)&quot;</span><span class="p">)</span>
</span><span id="L-757"><a href="#L-757"><span class="linenos"> 757</span></a>
</span><span id="L-758"><a href="#L-758"><span class="linenos"> 758</span></a> <span class="n">c</span><span class="o">.</span><span class="n">_client</span> <span class="o">=</span> <span class="bp">self</span>
</span><span id="L-759"><a href="#L-759"><span class="linenos"> 759</span></a> <span class="n">c</span><span class="o">.</span><span class="n">_schema</span> <span class="o">=</span> <span class="n">schema</span>
</span><span id="L-760"><a href="#L-760"><span class="linenos"> 760</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_consumers</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">c</span><span class="p">)</span>
</span><span id="L-761"><a href="#L-761"><span class="linenos"> 761</span></a> <span class="k">return</span> <span class="n">c</span>
</span><span id="L-762"><a href="#L-762"><span class="linenos"> 762</span></a>
</span><span id="L-763"><a href="#L-763"><span class="linenos"> 763</span></a> <span class="k">def</span> <span class="nf">create_reader</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">topic</span><span class="p">,</span> <span class="n">start_message_id</span><span class="p">,</span>
</span><span id="L-764"><a href="#L-764"><span class="linenos"> 764</span></a> <span class="n">schema</span><span class="o">=</span><span class="n">schema</span><span class="o">.</span><span class="n">BytesSchema</span><span class="p">(),</span>
</span><span id="L-765"><a href="#L-765"><span class="linenos"> 765</span></a> <span class="n">reader_listener</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
</span><span id="L-766"><a href="#L-766"><span class="linenos"> 766</span></a> <span class="n">receiver_queue_size</span><span class="o">=</span><span class="mi">1000</span><span class="p">,</span>
</span><span id="L-767"><a href="#L-767"><span class="linenos"> 767</span></a> <span class="n">reader_name</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
</span><span id="L-768"><a href="#L-768"><span class="linenos"> 768</span></a> <span class="n">subscription_role_prefix</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
</span><span id="L-769"><a href="#L-769"><span class="linenos"> 769</span></a> <span class="n">is_read_compacted</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
</span><span id="L-770"><a href="#L-770"><span class="linenos"> 770</span></a> <span class="n">crypto_key_reader</span><span class="o">=</span><span class="kc">None</span>
</span><span id="L-771"><a href="#L-771"><span class="linenos"> 771</span></a> <span class="p">):</span>
</span><span id="L-772"><a href="#L-772"><span class="linenos"> 772</span></a> <span class="sd">&quot;&quot;&quot;</span>
</span><span id="L-773"><a href="#L-773"><span class="linenos"> 773</span></a><span class="sd"> Create a reader on a particular topic</span>
</span><span id="L-774"><a href="#L-774"><span class="linenos"> 774</span></a>
</span><span id="L-775"><a href="#L-775"><span class="linenos"> 775</span></a><span class="sd"> **Args**</span>
</span><span id="L-776"><a href="#L-776"><span class="linenos"> 776</span></a>
</span><span id="L-777"><a href="#L-777"><span class="linenos"> 777</span></a><span class="sd"> * `topic`: The name of the topic.</span>
</span><span id="L-778"><a href="#L-778"><span class="linenos"> 778</span></a><span class="sd"> * `start_message_id`: The initial reader positioning is done by specifying a message id.</span>
</span><span id="L-779"><a href="#L-779"><span class="linenos"> 779</span></a><span class="sd"> The options are:</span>
</span><span id="L-780"><a href="#L-780"><span class="linenos"> 780</span></a><span class="sd"> * `MessageId.earliest`: Start reading from the earliest message available in the topic</span>
</span><span id="L-781"><a href="#L-781"><span class="linenos"> 781</span></a><span class="sd"> * `MessageId.latest`: Start reading from the end topic, only getting messages published</span>
</span><span id="L-782"><a href="#L-782"><span class="linenos"> 782</span></a><span class="sd"> after the reader was created</span>
</span><span id="L-783"><a href="#L-783"><span class="linenos"> 783</span></a><span class="sd"> * `MessageId`: When passing a particular message id, the reader will position itself on</span>
</span><span id="L-784"><a href="#L-784"><span class="linenos"> 784</span></a><span class="sd"> that specific position. The first message to be read will be the message next to the</span>
</span><span id="L-785"><a href="#L-785"><span class="linenos"> 785</span></a><span class="sd"> specified messageId. Message id can be serialized into a string and deserialized</span>
</span><span id="L-786"><a href="#L-786"><span class="linenos"> 786</span></a><span class="sd"> back into a `MessageId` object:</span>
</span><span id="L-787"><a href="#L-787"><span class="linenos"> 787</span></a>
</span><span id="L-788"><a href="#L-788"><span class="linenos"> 788</span></a><span class="sd"> # Serialize to string</span>
</span><span id="L-789"><a href="#L-789"><span class="linenos"> 789</span></a><span class="sd"> s = msg.message_id().serialize()</span>
</span><span id="L-790"><a href="#L-790"><span class="linenos"> 790</span></a>
</span><span id="L-791"><a href="#L-791"><span class="linenos"> 791</span></a><span class="sd"> # Deserialize from string</span>
</span><span id="L-792"><a href="#L-792"><span class="linenos"> 792</span></a><span class="sd"> msg_id = MessageId.deserialize(s)</span>
</span><span id="L-793"><a href="#L-793"><span class="linenos"> 793</span></a>
</span><span id="L-794"><a href="#L-794"><span class="linenos"> 794</span></a><span class="sd"> **Options**</span>
</span><span id="L-795"><a href="#L-795"><span class="linenos"> 795</span></a>
</span><span id="L-796"><a href="#L-796"><span class="linenos"> 796</span></a><span class="sd"> * `schema`:</span>
</span><span id="L-797"><a href="#L-797"><span class="linenos"> 797</span></a><span class="sd"> Define the schema of the data that will be received by this reader.</span>
</span><span id="L-798"><a href="#L-798"><span class="linenos"> 798</span></a><span class="sd"> * `reader_listener`:</span>
</span><span id="L-799"><a href="#L-799"><span class="linenos"> 799</span></a><span class="sd"> Sets a message listener for the reader. When the listener is set,</span>
</span><span id="L-800"><a href="#L-800"><span class="linenos"> 800</span></a><span class="sd"> the application will receive messages through it. Calls to</span>
</span><span id="L-801"><a href="#L-801"><span class="linenos"> 801</span></a><span class="sd"> `reader.read_next()` will not be allowed. The listener function needs</span>
</span><span id="L-802"><a href="#L-802"><span class="linenos"> 802</span></a><span class="sd"> to accept (reader, message), for example:</span>
</span><span id="L-803"><a href="#L-803"><span class="linenos"> 803</span></a>
</span><span id="L-804"><a href="#L-804"><span class="linenos"> 804</span></a><span class="sd"> def my_listener(reader, message):</span>
</span><span id="L-805"><a href="#L-805"><span class="linenos"> 805</span></a><span class="sd"> # process message</span>
</span><span id="L-806"><a href="#L-806"><span class="linenos"> 806</span></a><span class="sd"> pass</span>
</span><span id="L-807"><a href="#L-807"><span class="linenos"> 807</span></a>
</span><span id="L-808"><a href="#L-808"><span class="linenos"> 808</span></a><span class="sd"> * `receiver_queue_size`:</span>
</span><span id="L-809"><a href="#L-809"><span class="linenos"> 809</span></a><span class="sd"> Sets the size of the reader receive queue. The reader receive</span>
</span><span id="L-810"><a href="#L-810"><span class="linenos"> 810</span></a><span class="sd"> queue controls how many messages can be accumulated by the reader</span>
</span><span id="L-811"><a href="#L-811"><span class="linenos"> 811</span></a><span class="sd"> before the application calls `read_next()`. Using a higher value could</span>
</span><span id="L-812"><a href="#L-812"><span class="linenos"> 812</span></a><span class="sd"> potentially increase the reader throughput at the expense of higher</span>
</span><span id="L-813"><a href="#L-813"><span class="linenos"> 813</span></a><span class="sd"> memory utilization.</span>
</span><span id="L-814"><a href="#L-814"><span class="linenos"> 814</span></a><span class="sd"> * `reader_name`:</span>
</span><span id="L-815"><a href="#L-815"><span class="linenos"> 815</span></a><span class="sd"> Sets the reader name.</span>
</span><span id="L-816"><a href="#L-816"><span class="linenos"> 816</span></a><span class="sd"> * `subscription_role_prefix`:</span>
</span><span id="L-817"><a href="#L-817"><span class="linenos"> 817</span></a><span class="sd"> Sets the subscription role prefix.</span>
</span><span id="L-818"><a href="#L-818"><span class="linenos"> 818</span></a><span class="sd"> * `is_read_compacted`:</span>
</span><span id="L-819"><a href="#L-819"><span class="linenos"> 819</span></a><span class="sd"> Selects whether to read the compacted version of the topic</span>
</span><span id="L-820"><a href="#L-820"><span class="linenos"> 820</span></a><span class="sd"> * crypto_key_reader:</span>
</span><span id="L-821"><a href="#L-821"><span class="linenos"> 821</span></a><span class="sd"> Symmetric encryption class implementation, configuring public key encryption messages for the producer</span>
</span><span id="L-822"><a href="#L-822"><span class="linenos"> 822</span></a><span class="sd"> and private key decryption messages for the consumer</span>
</span><span id="L-823"><a href="#L-823"><span class="linenos"> 823</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="L-824"><a href="#L-824"><span class="linenos"> 824</span></a> <span class="n">_check_type</span><span class="p">(</span><span class="nb">str</span><span class="p">,</span> <span class="n">topic</span><span class="p">,</span> <span class="s1">&#39;topic&#39;</span><span class="p">)</span>
</span><span id="L-825"><a href="#L-825"><span class="linenos"> 825</span></a> <span class="n">_check_type</span><span class="p">(</span><span class="n">_pulsar</span><span class="o">.</span><span class="n">MessageId</span><span class="p">,</span> <span class="n">start_message_id</span><span class="p">,</span> <span class="s1">&#39;start_message_id&#39;</span><span class="p">)</span>
</span><span id="L-826"><a href="#L-826"><span class="linenos"> 826</span></a> <span class="n">_check_type</span><span class="p">(</span><span class="n">_schema</span><span class="o">.</span><span class="n">Schema</span><span class="p">,</span> <span class="n">schema</span><span class="p">,</span> <span class="s1">&#39;schema&#39;</span><span class="p">)</span>
</span><span id="L-827"><a href="#L-827"><span class="linenos"> 827</span></a> <span class="n">_check_type</span><span class="p">(</span><span class="nb">int</span><span class="p">,</span> <span class="n">receiver_queue_size</span><span class="p">,</span> <span class="s1">&#39;receiver_queue_size&#39;</span><span class="p">)</span>
</span><span id="L-828"><a href="#L-828"><span class="linenos"> 828</span></a> <span class="n">_check_type_or_none</span><span class="p">(</span><span class="nb">str</span><span class="p">,</span> <span class="n">reader_name</span><span class="p">,</span> <span class="s1">&#39;reader_name&#39;</span><span class="p">)</span>
</span><span id="L-829"><a href="#L-829"><span class="linenos"> 829</span></a> <span class="n">_check_type_or_none</span><span class="p">(</span><span class="nb">str</span><span class="p">,</span> <span class="n">subscription_role_prefix</span><span class="p">,</span> <span class="s1">&#39;subscription_role_prefix&#39;</span><span class="p">)</span>
</span><span id="L-830"><a href="#L-830"><span class="linenos"> 830</span></a> <span class="n">_check_type</span><span class="p">(</span><span class="nb">bool</span><span class="p">,</span> <span class="n">is_read_compacted</span><span class="p">,</span> <span class="s1">&#39;is_read_compacted&#39;</span><span class="p">)</span>
</span><span id="L-831"><a href="#L-831"><span class="linenos"> 831</span></a> <span class="n">_check_type_or_none</span><span class="p">(</span><span class="n">CryptoKeyReader</span><span class="p">,</span> <span class="n">crypto_key_reader</span><span class="p">,</span> <span class="s1">&#39;crypto_key_reader&#39;</span><span class="p">)</span>
</span><span id="L-832"><a href="#L-832"><span class="linenos"> 832</span></a>
</span><span id="L-833"><a href="#L-833"><span class="linenos"> 833</span></a> <span class="n">conf</span> <span class="o">=</span> <span class="n">_pulsar</span><span class="o">.</span><span class="n">ReaderConfiguration</span><span class="p">()</span>
</span><span id="L-834"><a href="#L-834"><span class="linenos"> 834</span></a> <span class="k">if</span> <span class="n">reader_listener</span><span class="p">:</span>
</span><span id="L-835"><a href="#L-835"><span class="linenos"> 835</span></a> <span class="n">conf</span><span class="o">.</span><span class="n">reader_listener</span><span class="p">(</span><span class="n">_listener_wrapper</span><span class="p">(</span><span class="n">reader_listener</span><span class="p">,</span> <span class="n">schema</span><span class="p">))</span>
</span><span id="L-836"><a href="#L-836"><span class="linenos"> 836</span></a> <span class="n">conf</span><span class="o">.</span><span class="n">receiver_queue_size</span><span class="p">(</span><span class="n">receiver_queue_size</span><span class="p">)</span>
</span><span id="L-837"><a href="#L-837"><span class="linenos"> 837</span></a> <span class="k">if</span> <span class="n">reader_name</span><span class="p">:</span>
</span><span id="L-838"><a href="#L-838"><span class="linenos"> 838</span></a> <span class="n">conf</span><span class="o">.</span><span class="n">reader_name</span><span class="p">(</span><span class="n">reader_name</span><span class="p">)</span>
</span><span id="L-839"><a href="#L-839"><span class="linenos"> 839</span></a> <span class="k">if</span> <span class="n">subscription_role_prefix</span><span class="p">:</span>
</span><span id="L-840"><a href="#L-840"><span class="linenos"> 840</span></a> <span class="n">conf</span><span class="o">.</span><span class="n">subscription_role_prefix</span><span class="p">(</span><span class="n">subscription_role_prefix</span><span class="p">)</span>
</span><span id="L-841"><a href="#L-841"><span class="linenos"> 841</span></a> <span class="n">conf</span><span class="o">.</span><span class="n">schema</span><span class="p">(</span><span class="n">schema</span><span class="o">.</span><span class="n">schema_info</span><span class="p">())</span>
</span><span id="L-842"><a href="#L-842"><span class="linenos"> 842</span></a> <span class="n">conf</span><span class="o">.</span><span class="n">read_compacted</span><span class="p">(</span><span class="n">is_read_compacted</span><span class="p">)</span>
</span><span id="L-843"><a href="#L-843"><span class="linenos"> 843</span></a> <span class="k">if</span> <span class="n">crypto_key_reader</span><span class="p">:</span>
</span><span id="L-844"><a href="#L-844"><span class="linenos"> 844</span></a> <span class="n">conf</span><span class="o">.</span><span class="n">crypto_key_reader</span><span class="p">(</span><span class="n">crypto_key_reader</span><span class="o">.</span><span class="n">cryptoKeyReader</span><span class="p">)</span>
</span><span id="L-845"><a href="#L-845"><span class="linenos"> 845</span></a>
</span><span id="L-846"><a href="#L-846"><span class="linenos"> 846</span></a> <span class="n">c</span> <span class="o">=</span> <span class="n">Reader</span><span class="p">()</span>
</span><span id="L-847"><a href="#L-847"><span class="linenos"> 847</span></a> <span class="n">c</span><span class="o">.</span><span class="n">_reader</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_client</span><span class="o">.</span><span class="n">create_reader</span><span class="p">(</span><span class="n">topic</span><span class="p">,</span> <span class="n">start_message_id</span><span class="p">,</span> <span class="n">conf</span><span class="p">)</span>
</span><span id="L-848"><a href="#L-848"><span class="linenos"> 848</span></a> <span class="n">c</span><span class="o">.</span><span class="n">_client</span> <span class="o">=</span> <span class="bp">self</span>
</span><span id="L-849"><a href="#L-849"><span class="linenos"> 849</span></a> <span class="n">c</span><span class="o">.</span><span class="n">_schema</span> <span class="o">=</span> <span class="n">schema</span>
</span><span id="L-850"><a href="#L-850"><span class="linenos"> 850</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_consumers</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">c</span><span class="p">)</span>
</span><span id="L-851"><a href="#L-851"><span class="linenos"> 851</span></a> <span class="k">return</span> <span class="n">c</span>
</span><span id="L-852"><a href="#L-852"><span class="linenos"> 852</span></a>
</span><span id="L-853"><a href="#L-853"><span class="linenos"> 853</span></a> <span class="k">def</span> <span class="nf">get_topic_partitions</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">topic</span><span class="p">):</span>
</span><span id="L-854"><a href="#L-854"><span class="linenos"> 854</span></a> <span class="sd">&quot;&quot;&quot;</span>
</span><span id="L-855"><a href="#L-855"><span class="linenos"> 855</span></a><span class="sd"> Get the list of partitions for a given topic.</span>
</span><span id="L-856"><a href="#L-856"><span class="linenos"> 856</span></a>
</span><span id="L-857"><a href="#L-857"><span class="linenos"> 857</span></a><span class="sd"> If the topic is partitioned, this will return a list of partition names. If the topic is not</span>
</span><span id="L-858"><a href="#L-858"><span class="linenos"> 858</span></a><span class="sd"> partitioned, the returned list will contain the topic name itself.</span>
</span><span id="L-859"><a href="#L-859"><span class="linenos"> 859</span></a>
</span><span id="L-860"><a href="#L-860"><span class="linenos"> 860</span></a><span class="sd"> This can be used to discover the partitions and create Reader, Consumer or Producer</span>
</span><span id="L-861"><a href="#L-861"><span class="linenos"> 861</span></a><span class="sd"> instances directly on a particular partition.</span>
</span><span id="L-862"><a href="#L-862"><span class="linenos"> 862</span></a><span class="sd"> :param topic: the topic name to lookup</span>
</span><span id="L-863"><a href="#L-863"><span class="linenos"> 863</span></a><span class="sd"> :return: a list of partition name</span>
</span><span id="L-864"><a href="#L-864"><span class="linenos"> 864</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="L-865"><a href="#L-865"><span class="linenos"> 865</span></a> <span class="n">_check_type</span><span class="p">(</span><span class="nb">str</span><span class="p">,</span> <span class="n">topic</span><span class="p">,</span> <span class="s1">&#39;topic&#39;</span><span class="p">)</span>
</span><span id="L-866"><a href="#L-866"><span class="linenos"> 866</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_client</span><span class="o">.</span><span class="n">get_topic_partitions</span><span class="p">(</span><span class="n">topic</span><span class="p">)</span>
</span><span id="L-867"><a href="#L-867"><span class="linenos"> 867</span></a>
</span><span id="L-868"><a href="#L-868"><span class="linenos"> 868</span></a> <span class="k">def</span> <span class="nf">shutdown</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
</span><span id="L-869"><a href="#L-869"><span class="linenos"> 869</span></a> <span class="sd">&quot;&quot;&quot;</span>
</span><span id="L-870"><a href="#L-870"><span class="linenos"> 870</span></a><span class="sd"> Perform immediate shutdown of Pulsar client.</span>
</span><span id="L-871"><a href="#L-871"><span class="linenos"> 871</span></a>
</span><span id="L-872"><a href="#L-872"><span class="linenos"> 872</span></a><span class="sd"> Release all resources and close all producer, consumer, and readers without waiting</span>
</span><span id="L-873"><a href="#L-873"><span class="linenos"> 873</span></a><span class="sd"> for ongoing operations to complete.</span>
</span><span id="L-874"><a href="#L-874"><span class="linenos"> 874</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="L-875"><a href="#L-875"><span class="linenos"> 875</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_client</span><span class="o">.</span><span class="n">shutdown</span><span class="p">()</span>
</span><span id="L-876"><a href="#L-876"><span class="linenos"> 876</span></a>
</span><span id="L-877"><a href="#L-877"><span class="linenos"> 877</span></a> <span class="k">def</span> <span class="nf">close</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
</span><span id="L-878"><a href="#L-878"><span class="linenos"> 878</span></a> <span class="sd">&quot;&quot;&quot;</span>
</span><span id="L-879"><a href="#L-879"><span class="linenos"> 879</span></a><span class="sd"> Close the client and all the associated producers and consumers</span>
</span><span id="L-880"><a href="#L-880"><span class="linenos"> 880</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="L-881"><a href="#L-881"><span class="linenos"> 881</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_client</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
</span><span id="L-882"><a href="#L-882"><span class="linenos"> 882</span></a>
</span><span id="L-883"><a href="#L-883"><span class="linenos"> 883</span></a>
</span><span id="L-884"><a href="#L-884"><span class="linenos"> 884</span></a><span class="k">class</span> <span class="nc">Producer</span><span class="p">:</span>
</span><span id="L-885"><a href="#L-885"><span class="linenos"> 885</span></a> <span class="sd">&quot;&quot;&quot;</span>
</span><span id="L-886"><a href="#L-886"><span class="linenos"> 886</span></a><span class="sd"> The Pulsar message producer, used to publish messages on a topic.</span>
</span><span id="L-887"><a href="#L-887"><span class="linenos"> 887</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="L-888"><a href="#L-888"><span class="linenos"> 888</span></a>
</span><span id="L-889"><a href="#L-889"><span class="linenos"> 889</span></a> <span class="k">def</span> <span class="nf">topic</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
</span><span id="L-890"><a href="#L-890"><span class="linenos"> 890</span></a> <span class="sd">&quot;&quot;&quot;</span>
</span><span id="L-891"><a href="#L-891"><span class="linenos"> 891</span></a><span class="sd"> Return the topic which producer is publishing to</span>
</span><span id="L-892"><a href="#L-892"><span class="linenos"> 892</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="L-893"><a href="#L-893"><span class="linenos"> 893</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_producer</span><span class="o">.</span><span class="n">topic</span><span class="p">()</span>
</span><span id="L-894"><a href="#L-894"><span class="linenos"> 894</span></a>
</span><span id="L-895"><a href="#L-895"><span class="linenos"> 895</span></a> <span class="k">def</span> <span class="nf">producer_name</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
</span><span id="L-896"><a href="#L-896"><span class="linenos"> 896</span></a> <span class="sd">&quot;&quot;&quot;</span>
</span><span id="L-897"><a href="#L-897"><span class="linenos"> 897</span></a><span class="sd"> Return the producer name which could have been assigned by the</span>
</span><span id="L-898"><a href="#L-898"><span class="linenos"> 898</span></a><span class="sd"> system or specified by the client</span>
</span><span id="L-899"><a href="#L-899"><span class="linenos"> 899</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="L-900"><a href="#L-900"><span class="linenos"> 900</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_producer</span><span class="o">.</span><span class="n">producer_name</span><span class="p">()</span>
</span><span id="L-901"><a href="#L-901"><span class="linenos"> 901</span></a>
</span><span id="L-902"><a href="#L-902"><span class="linenos"> 902</span></a> <span class="k">def</span> <span class="nf">last_sequence_id</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
</span><span id="L-903"><a href="#L-903"><span class="linenos"> 903</span></a> <span class="sd">&quot;&quot;&quot;</span>
</span><span id="L-904"><a href="#L-904"><span class="linenos"> 904</span></a><span class="sd"> Get the last sequence id that was published by this producer.</span>
</span><span id="L-905"><a href="#L-905"><span class="linenos"> 905</span></a>
</span><span id="L-906"><a href="#L-906"><span class="linenos"> 906</span></a><span class="sd"> This represent either the automatically assigned or custom sequence id</span>
</span><span id="L-907"><a href="#L-907"><span class="linenos"> 907</span></a><span class="sd"> (set on the `MessageBuilder`) that was published and acknowledged by the broker.</span>
</span><span id="L-908"><a href="#L-908"><span class="linenos"> 908</span></a>
</span><span id="L-909"><a href="#L-909"><span class="linenos"> 909</span></a><span class="sd"> After recreating a producer with the same producer name, this will return the</span>
</span><span id="L-910"><a href="#L-910"><span class="linenos"> 910</span></a><span class="sd"> last message that was published in the previous producer session, or -1 if</span>
</span><span id="L-911"><a href="#L-911"><span class="linenos"> 911</span></a><span class="sd"> there no message was ever published.</span>
</span><span id="L-912"><a href="#L-912"><span class="linenos"> 912</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="L-913"><a href="#L-913"><span class="linenos"> 913</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_producer</span><span class="o">.</span><span class="n">last_sequence_id</span><span class="p">()</span>
</span><span id="L-914"><a href="#L-914"><span class="linenos"> 914</span></a>
</span><span id="L-915"><a href="#L-915"><span class="linenos"> 915</span></a> <span class="k">def</span> <span class="nf">send</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">content</span><span class="p">,</span>
</span><span id="L-916"><a href="#L-916"><span class="linenos"> 916</span></a> <span class="n">properties</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
</span><span id="L-917"><a href="#L-917"><span class="linenos"> 917</span></a> <span class="n">partition_key</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
</span><span id="L-918"><a href="#L-918"><span class="linenos"> 918</span></a> <span class="n">sequence_id</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
</span><span id="L-919"><a href="#L-919"><span class="linenos"> 919</span></a> <span class="n">replication_clusters</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
</span><span id="L-920"><a href="#L-920"><span class="linenos"> 920</span></a> <span class="n">disable_replication</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
</span><span id="L-921"><a href="#L-921"><span class="linenos"> 921</span></a> <span class="n">event_timestamp</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
</span><span id="L-922"><a href="#L-922"><span class="linenos"> 922</span></a> <span class="n">deliver_at</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
</span><span id="L-923"><a href="#L-923"><span class="linenos"> 923</span></a> <span class="n">deliver_after</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
</span><span id="L-924"><a href="#L-924"><span class="linenos"> 924</span></a> <span class="p">):</span>
</span><span id="L-925"><a href="#L-925"><span class="linenos"> 925</span></a> <span class="sd">&quot;&quot;&quot;</span>
</span><span id="L-926"><a href="#L-926"><span class="linenos"> 926</span></a><span class="sd"> Publish a message on the topic. Blocks until the message is acknowledged</span>
</span><span id="L-927"><a href="#L-927"><span class="linenos"> 927</span></a>
</span><span id="L-928"><a href="#L-928"><span class="linenos"> 928</span></a><span class="sd"> Returns a `MessageId` object that represents where the message is persisted.</span>
</span><span id="L-929"><a href="#L-929"><span class="linenos"> 929</span></a>
</span><span id="L-930"><a href="#L-930"><span class="linenos"> 930</span></a><span class="sd"> **Args**</span>
</span><span id="L-931"><a href="#L-931"><span class="linenos"> 931</span></a>
</span><span id="L-932"><a href="#L-932"><span class="linenos"> 932</span></a><span class="sd"> * `content`:</span>
</span><span id="L-933"><a href="#L-933"><span class="linenos"> 933</span></a><span class="sd"> A `bytes` object with the message payload.</span>
</span><span id="L-934"><a href="#L-934"><span class="linenos"> 934</span></a>
</span><span id="L-935"><a href="#L-935"><span class="linenos"> 935</span></a><span class="sd"> **Options**</span>
</span><span id="L-936"><a href="#L-936"><span class="linenos"> 936</span></a>
</span><span id="L-937"><a href="#L-937"><span class="linenos"> 937</span></a><span class="sd"> * `properties`:</span>
</span><span id="L-938"><a href="#L-938"><span class="linenos"> 938</span></a><span class="sd"> A dict of application-defined string properties.</span>
</span><span id="L-939"><a href="#L-939"><span class="linenos"> 939</span></a><span class="sd"> * `partition_key`:</span>
</span><span id="L-940"><a href="#L-940"><span class="linenos"> 940</span></a><span class="sd"> Sets the partition key for message routing. A hash of this key is used</span>
</span><span id="L-941"><a href="#L-941"><span class="linenos"> 941</span></a><span class="sd"> to determine the message&#39;s topic partition.</span>
</span><span id="L-942"><a href="#L-942"><span class="linenos"> 942</span></a><span class="sd"> * `sequence_id`:</span>
</span><span id="L-943"><a href="#L-943"><span class="linenos"> 943</span></a><span class="sd"> Specify a custom sequence id for the message being published.</span>
</span><span id="L-944"><a href="#L-944"><span class="linenos"> 944</span></a><span class="sd"> * `replication_clusters`:</span>
</span><span id="L-945"><a href="#L-945"><span class="linenos"> 945</span></a><span class="sd"> Override namespace replication clusters. Note that it is the caller&#39;s</span>
</span><span id="L-946"><a href="#L-946"><span class="linenos"> 946</span></a><span class="sd"> responsibility to provide valid cluster names and that all clusters</span>
</span><span id="L-947"><a href="#L-947"><span class="linenos"> 947</span></a><span class="sd"> have been previously configured as topics. Given an empty list,</span>
</span><span id="L-948"><a href="#L-948"><span class="linenos"> 948</span></a><span class="sd"> the message will replicate according to the namespace configuration.</span>
</span><span id="L-949"><a href="#L-949"><span class="linenos"> 949</span></a><span class="sd"> * `disable_replication`:</span>
</span><span id="L-950"><a href="#L-950"><span class="linenos"> 950</span></a><span class="sd"> Do not replicate this message.</span>
</span><span id="L-951"><a href="#L-951"><span class="linenos"> 951</span></a><span class="sd"> * `event_timestamp`:</span>
</span><span id="L-952"><a href="#L-952"><span class="linenos"> 952</span></a><span class="sd"> Timestamp in millis of the timestamp of event creation</span>
</span><span id="L-953"><a href="#L-953"><span class="linenos"> 953</span></a><span class="sd"> * `deliver_at`:</span>
</span><span id="L-954"><a href="#L-954"><span class="linenos"> 954</span></a><span class="sd"> Specify the this message should not be delivered earlier than the</span>
</span><span id="L-955"><a href="#L-955"><span class="linenos"> 955</span></a><span class="sd"> specified timestamp.</span>
</span><span id="L-956"><a href="#L-956"><span class="linenos"> 956</span></a><span class="sd"> The timestamp is milliseconds and based on UTC</span>
</span><span id="L-957"><a href="#L-957"><span class="linenos"> 957</span></a><span class="sd"> * `deliver_after`:</span>
</span><span id="L-958"><a href="#L-958"><span class="linenos"> 958</span></a><span class="sd"> Specify a delay in timedelta for the delivery of the messages.</span>
</span><span id="L-959"><a href="#L-959"><span class="linenos"> 959</span></a>
</span><span id="L-960"><a href="#L-960"><span class="linenos"> 960</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="L-961"><a href="#L-961"><span class="linenos"> 961</span></a> <span class="n">msg</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_build_msg</span><span class="p">(</span><span class="n">content</span><span class="p">,</span> <span class="n">properties</span><span class="p">,</span> <span class="n">partition_key</span><span class="p">,</span> <span class="n">sequence_id</span><span class="p">,</span>
</span><span id="L-962"><a href="#L-962"><span class="linenos"> 962</span></a> <span class="n">replication_clusters</span><span class="p">,</span> <span class="n">disable_replication</span><span class="p">,</span> <span class="n">event_timestamp</span><span class="p">,</span>
</span><span id="L-963"><a href="#L-963"><span class="linenos"> 963</span></a> <span class="n">deliver_at</span><span class="p">,</span> <span class="n">deliver_after</span><span class="p">)</span>
</span><span id="L-964"><a href="#L-964"><span class="linenos"> 964</span></a> <span class="k">return</span> <span class="n">MessageId</span><span class="o">.</span><span class="n">deserialize</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_producer</span><span class="o">.</span><span class="n">send</span><span class="p">(</span><span class="n">msg</span><span class="p">))</span>
</span><span id="L-965"><a href="#L-965"><span class="linenos"> 965</span></a>
</span><span id="L-966"><a href="#L-966"><span class="linenos"> 966</span></a> <span class="k">def</span> <span class="nf">send_async</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">content</span><span class="p">,</span> <span class="n">callback</span><span class="p">,</span>
</span><span id="L-967"><a href="#L-967"><span class="linenos"> 967</span></a> <span class="n">properties</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
</span><span id="L-968"><a href="#L-968"><span class="linenos"> 968</span></a> <span class="n">partition_key</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
</span><span id="L-969"><a href="#L-969"><span class="linenos"> 969</span></a> <span class="n">sequence_id</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
</span><span id="L-970"><a href="#L-970"><span class="linenos"> 970</span></a> <span class="n">replication_clusters</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
</span><span id="L-971"><a href="#L-971"><span class="linenos"> 971</span></a> <span class="n">disable_replication</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
</span><span id="L-972"><a href="#L-972"><span class="linenos"> 972</span></a> <span class="n">event_timestamp</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
</span><span id="L-973"><a href="#L-973"><span class="linenos"> 973</span></a> <span class="n">deliver_at</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
</span><span id="L-974"><a href="#L-974"><span class="linenos"> 974</span></a> <span class="n">deliver_after</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
</span><span id="L-975"><a href="#L-975"><span class="linenos"> 975</span></a> <span class="p">):</span>
</span><span id="L-976"><a href="#L-976"><span class="linenos"> 976</span></a> <span class="sd">&quot;&quot;&quot;</span>
</span><span id="L-977"><a href="#L-977"><span class="linenos"> 977</span></a><span class="sd"> Send a message asynchronously.</span>
</span><span id="L-978"><a href="#L-978"><span class="linenos"> 978</span></a>
</span><span id="L-979"><a href="#L-979"><span class="linenos"> 979</span></a><span class="sd"> The `callback` will be invoked once the message has been acknowledged</span>
</span><span id="L-980"><a href="#L-980"><span class="linenos"> 980</span></a><span class="sd"> by the broker.</span>
</span><span id="L-981"><a href="#L-981"><span class="linenos"> 981</span></a>
</span><span id="L-982"><a href="#L-982"><span class="linenos"> 982</span></a><span class="sd"> Example:</span>
</span><span id="L-983"><a href="#L-983"><span class="linenos"> 983</span></a>
</span><span id="L-984"><a href="#L-984"><span class="linenos"> 984</span></a><span class="sd"> #!python</span>
</span><span id="L-985"><a href="#L-985"><span class="linenos"> 985</span></a><span class="sd"> def callback(res, msg_id):</span>
</span><span id="L-986"><a href="#L-986"><span class="linenos"> 986</span></a><span class="sd"> print(&#39;Message published: %s&#39; % res)</span>
</span><span id="L-987"><a href="#L-987"><span class="linenos"> 987</span></a>
</span><span id="L-988"><a href="#L-988"><span class="linenos"> 988</span></a><span class="sd"> producer.send_async(msg, callback)</span>
</span><span id="L-989"><a href="#L-989"><span class="linenos"> 989</span></a>
</span><span id="L-990"><a href="#L-990"><span class="linenos"> 990</span></a><span class="sd"> When the producer queue is full, by default the message will be rejected</span>
</span><span id="L-991"><a href="#L-991"><span class="linenos"> 991</span></a><span class="sd"> and the callback invoked with an error code.</span>
</span><span id="L-992"><a href="#L-992"><span class="linenos"> 992</span></a>
</span><span id="L-993"><a href="#L-993"><span class="linenos"> 993</span></a><span class="sd"> **Args**</span>
</span><span id="L-994"><a href="#L-994"><span class="linenos"> 994</span></a>
</span><span id="L-995"><a href="#L-995"><span class="linenos"> 995</span></a><span class="sd"> * `content`:</span>
</span><span id="L-996"><a href="#L-996"><span class="linenos"> 996</span></a><span class="sd"> A `bytes` object with the message payload.</span>
</span><span id="L-997"><a href="#L-997"><span class="linenos"> 997</span></a>
</span><span id="L-998"><a href="#L-998"><span class="linenos"> 998</span></a><span class="sd"> **Options**</span>
</span><span id="L-999"><a href="#L-999"><span class="linenos"> 999</span></a>
</span><span id="L-1000"><a href="#L-1000"><span class="linenos">1000</span></a><span class="sd"> * `properties`:</span>
</span><span id="L-1001"><a href="#L-1001"><span class="linenos">1001</span></a><span class="sd"> A dict of application0-defined string properties.</span>
</span><span id="L-1002"><a href="#L-1002"><span class="linenos">1002</span></a><span class="sd"> * `partition_key`:</span>
</span><span id="L-1003"><a href="#L-1003"><span class="linenos">1003</span></a><span class="sd"> Sets the partition key for the message routing. A hash of this key is</span>
</span><span id="L-1004"><a href="#L-1004"><span class="linenos">1004</span></a><span class="sd"> used to determine the message&#39;s topic partition.</span>
</span><span id="L-1005"><a href="#L-1005"><span class="linenos">1005</span></a><span class="sd"> * `sequence_id`:</span>
</span><span id="L-1006"><a href="#L-1006"><span class="linenos">1006</span></a><span class="sd"> Specify a custom sequence id for the message being published.</span>
</span><span id="L-1007"><a href="#L-1007"><span class="linenos">1007</span></a><span class="sd"> * `replication_clusters`: Override namespace replication clusters. Note</span>
</span><span id="L-1008"><a href="#L-1008"><span class="linenos">1008</span></a><span class="sd"> that it is the caller&#39;s responsibility to provide valid cluster names</span>
</span><span id="L-1009"><a href="#L-1009"><span class="linenos">1009</span></a><span class="sd"> and that all clusters have been previously configured as topics.</span>
</span><span id="L-1010"><a href="#L-1010"><span class="linenos">1010</span></a><span class="sd"> Given an empty list, the message will replicate per the namespace</span>
</span><span id="L-1011"><a href="#L-1011"><span class="linenos">1011</span></a><span class="sd"> configuration.</span>
</span><span id="L-1012"><a href="#L-1012"><span class="linenos">1012</span></a><span class="sd"> * `disable_replication`:</span>
</span><span id="L-1013"><a href="#L-1013"><span class="linenos">1013</span></a><span class="sd"> Do not replicate this message.</span>
</span><span id="L-1014"><a href="#L-1014"><span class="linenos">1014</span></a><span class="sd"> * `event_timestamp`:</span>
</span><span id="L-1015"><a href="#L-1015"><span class="linenos">1015</span></a><span class="sd"> Timestamp in millis of the timestamp of event creation</span>
</span><span id="L-1016"><a href="#L-1016"><span class="linenos">1016</span></a><span class="sd"> * `deliver_at`:</span>
</span><span id="L-1017"><a href="#L-1017"><span class="linenos">1017</span></a><span class="sd"> Specify the this message should not be delivered earlier than the</span>
</span><span id="L-1018"><a href="#L-1018"><span class="linenos">1018</span></a><span class="sd"> specified timestamp.</span>
</span><span id="L-1019"><a href="#L-1019"><span class="linenos">1019</span></a><span class="sd"> The timestamp is milliseconds and based on UTC</span>
</span><span id="L-1020"><a href="#L-1020"><span class="linenos">1020</span></a><span class="sd"> * `deliver_after`:</span>
</span><span id="L-1021"><a href="#L-1021"><span class="linenos">1021</span></a><span class="sd"> Specify a delay in timedelta for the delivery of the messages.</span>
</span><span id="L-1022"><a href="#L-1022"><span class="linenos">1022</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="L-1023"><a href="#L-1023"><span class="linenos">1023</span></a> <span class="n">msg</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_build_msg</span><span class="p">(</span><span class="n">content</span><span class="p">,</span> <span class="n">properties</span><span class="p">,</span> <span class="n">partition_key</span><span class="p">,</span> <span class="n">sequence_id</span><span class="p">,</span>
</span><span id="L-1024"><a href="#L-1024"><span class="linenos">1024</span></a> <span class="n">replication_clusters</span><span class="p">,</span> <span class="n">disable_replication</span><span class="p">,</span> <span class="n">event_timestamp</span><span class="p">,</span>
</span><span id="L-1025"><a href="#L-1025"><span class="linenos">1025</span></a> <span class="n">deliver_at</span><span class="p">,</span> <span class="n">deliver_after</span><span class="p">)</span>
</span><span id="L-1026"><a href="#L-1026"><span class="linenos">1026</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_producer</span><span class="o">.</span><span class="n">send_async</span><span class="p">(</span><span class="n">msg</span><span class="p">,</span> <span class="n">callback</span><span class="p">)</span>
</span><span id="L-1027"><a href="#L-1027"><span class="linenos">1027</span></a>
</span><span id="L-1028"><a href="#L-1028"><span class="linenos">1028</span></a>
</span><span id="L-1029"><a href="#L-1029"><span class="linenos">1029</span></a> <span class="k">def</span> <span class="nf">flush</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
</span><span id="L-1030"><a href="#L-1030"><span class="linenos">1030</span></a> <span class="sd">&quot;&quot;&quot;</span>
</span><span id="L-1031"><a href="#L-1031"><span class="linenos">1031</span></a><span class="sd"> Flush all the messages buffered in the client and wait until all messages have been</span>
</span><span id="L-1032"><a href="#L-1032"><span class="linenos">1032</span></a><span class="sd"> successfully persisted</span>
</span><span id="L-1033"><a href="#L-1033"><span class="linenos">1033</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="L-1034"><a href="#L-1034"><span class="linenos">1034</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_producer</span><span class="o">.</span><span class="n">flush</span><span class="p">()</span>
</span><span id="L-1035"><a href="#L-1035"><span class="linenos">1035</span></a>
</span><span id="L-1036"><a href="#L-1036"><span class="linenos">1036</span></a>
</span><span id="L-1037"><a href="#L-1037"><span class="linenos">1037</span></a> <span class="k">def</span> <span class="nf">close</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
</span><span id="L-1038"><a href="#L-1038"><span class="linenos">1038</span></a> <span class="sd">&quot;&quot;&quot;</span>
</span><span id="L-1039"><a href="#L-1039"><span class="linenos">1039</span></a><span class="sd"> Close the producer.</span>
</span><span id="L-1040"><a href="#L-1040"><span class="linenos">1040</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="L-1041"><a href="#L-1041"><span class="linenos">1041</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_producer</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
</span><span id="L-1042"><a href="#L-1042"><span class="linenos">1042</span></a>
</span><span id="L-1043"><a href="#L-1043"><span class="linenos">1043</span></a> <span class="k">def</span> <span class="nf">_build_msg</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">content</span><span class="p">,</span> <span class="n">properties</span><span class="p">,</span> <span class="n">partition_key</span><span class="p">,</span> <span class="n">sequence_id</span><span class="p">,</span>
</span><span id="L-1044"><a href="#L-1044"><span class="linenos">1044</span></a> <span class="n">replication_clusters</span><span class="p">,</span> <span class="n">disable_replication</span><span class="p">,</span> <span class="n">event_timestamp</span><span class="p">,</span>
</span><span id="L-1045"><a href="#L-1045"><span class="linenos">1045</span></a> <span class="n">deliver_at</span><span class="p">,</span> <span class="n">deliver_after</span><span class="p">):</span>
</span><span id="L-1046"><a href="#L-1046"><span class="linenos">1046</span></a> <span class="n">data</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_schema</span><span class="o">.</span><span class="n">encode</span><span class="p">(</span><span class="n">content</span><span class="p">)</span>
</span><span id="L-1047"><a href="#L-1047"><span class="linenos">1047</span></a>
</span><span id="L-1048"><a href="#L-1048"><span class="linenos">1048</span></a> <span class="n">_check_type</span><span class="p">(</span><span class="nb">bytes</span><span class="p">,</span> <span class="n">data</span><span class="p">,</span> <span class="s1">&#39;data&#39;</span><span class="p">)</span>
</span><span id="L-1049"><a href="#L-1049"><span class="linenos">1049</span></a> <span class="n">_check_type_or_none</span><span class="p">(</span><span class="nb">dict</span><span class="p">,</span> <span class="n">properties</span><span class="p">,</span> <span class="s1">&#39;properties&#39;</span><span class="p">)</span>
</span><span id="L-1050"><a href="#L-1050"><span class="linenos">1050</span></a> <span class="n">_check_type_or_none</span><span class="p">(</span><span class="nb">str</span><span class="p">,</span> <span class="n">partition_key</span><span class="p">,</span> <span class="s1">&#39;partition_key&#39;</span><span class="p">)</span>
</span><span id="L-1051"><a href="#L-1051"><span class="linenos">1051</span></a> <span class="n">_check_type_or_none</span><span class="p">(</span><span class="nb">int</span><span class="p">,</span> <span class="n">sequence_id</span><span class="p">,</span> <span class="s1">&#39;sequence_id&#39;</span><span class="p">)</span>
</span><span id="L-1052"><a href="#L-1052"><span class="linenos">1052</span></a> <span class="n">_check_type_or_none</span><span class="p">(</span><span class="nb">list</span><span class="p">,</span> <span class="n">replication_clusters</span><span class="p">,</span> <span class="s1">&#39;replication_clusters&#39;</span><span class="p">)</span>
</span><span id="L-1053"><a href="#L-1053"><span class="linenos">1053</span></a> <span class="n">_check_type</span><span class="p">(</span><span class="nb">bool</span><span class="p">,</span> <span class="n">disable_replication</span><span class="p">,</span> <span class="s1">&#39;disable_replication&#39;</span><span class="p">)</span>
</span><span id="L-1054"><a href="#L-1054"><span class="linenos">1054</span></a> <span class="n">_check_type_or_none</span><span class="p">(</span><span class="nb">int</span><span class="p">,</span> <span class="n">event_timestamp</span><span class="p">,</span> <span class="s1">&#39;event_timestamp&#39;</span><span class="p">)</span>
</span><span id="L-1055"><a href="#L-1055"><span class="linenos">1055</span></a> <span class="n">_check_type_or_none</span><span class="p">(</span><span class="nb">int</span><span class="p">,</span> <span class="n">deliver_at</span><span class="p">,</span> <span class="s1">&#39;deliver_at&#39;</span><span class="p">)</span>
</span><span id="L-1056"><a href="#L-1056"><span class="linenos">1056</span></a> <span class="n">_check_type_or_none</span><span class="p">(</span><span class="n">timedelta</span><span class="p">,</span> <span class="n">deliver_after</span><span class="p">,</span> <span class="s1">&#39;deliver_after&#39;</span><span class="p">)</span>
</span><span id="L-1057"><a href="#L-1057"><span class="linenos">1057</span></a>
</span><span id="L-1058"><a href="#L-1058"><span class="linenos">1058</span></a> <span class="n">mb</span> <span class="o">=</span> <span class="n">_pulsar</span><span class="o">.</span><span class="n">MessageBuilder</span><span class="p">()</span>
</span><span id="L-1059"><a href="#L-1059"><span class="linenos">1059</span></a> <span class="n">mb</span><span class="o">.</span><span class="n">content</span><span class="p">(</span><span class="n">data</span><span class="p">)</span>
</span><span id="L-1060"><a href="#L-1060"><span class="linenos">1060</span></a> <span class="k">if</span> <span class="n">properties</span><span class="p">:</span>
</span><span id="L-1061"><a href="#L-1061"><span class="linenos">1061</span></a> <span class="k">for</span> <span class="n">k</span><span class="p">,</span> <span class="n">v</span> <span class="ow">in</span> <span class="n">properties</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
</span><span id="L-1062"><a href="#L-1062"><span class="linenos">1062</span></a> <span class="n">mb</span><span class="o">.</span><span class="n">property</span><span class="p">(</span><span class="n">k</span><span class="p">,</span> <span class="n">v</span><span class="p">)</span>
</span><span id="L-1063"><a href="#L-1063"><span class="linenos">1063</span></a> <span class="k">if</span> <span class="n">partition_key</span><span class="p">:</span>
</span><span id="L-1064"><a href="#L-1064"><span class="linenos">1064</span></a> <span class="n">mb</span><span class="o">.</span><span class="n">partition_key</span><span class="p">(</span><span class="n">partition_key</span><span class="p">)</span>
</span><span id="L-1065"><a href="#L-1065"><span class="linenos">1065</span></a> <span class="k">if</span> <span class="n">sequence_id</span><span class="p">:</span>
</span><span id="L-1066"><a href="#L-1066"><span class="linenos">1066</span></a> <span class="n">mb</span><span class="o">.</span><span class="n">sequence_id</span><span class="p">(</span><span class="n">sequence_id</span><span class="p">)</span>
</span><span id="L-1067"><a href="#L-1067"><span class="linenos">1067</span></a> <span class="k">if</span> <span class="n">replication_clusters</span><span class="p">:</span>
</span><span id="L-1068"><a href="#L-1068"><span class="linenos">1068</span></a> <span class="n">mb</span><span class="o">.</span><span class="n">replication_clusters</span><span class="p">(</span><span class="n">replication_clusters</span><span class="p">)</span>
</span><span id="L-1069"><a href="#L-1069"><span class="linenos">1069</span></a> <span class="k">if</span> <span class="n">disable_replication</span><span class="p">:</span>
</span><span id="L-1070"><a href="#L-1070"><span class="linenos">1070</span></a> <span class="n">mb</span><span class="o">.</span><span class="n">disable_replication</span><span class="p">(</span><span class="n">disable_replication</span><span class="p">)</span>
</span><span id="L-1071"><a href="#L-1071"><span class="linenos">1071</span></a> <span class="k">if</span> <span class="n">event_timestamp</span><span class="p">:</span>
</span><span id="L-1072"><a href="#L-1072"><span class="linenos">1072</span></a> <span class="n">mb</span><span class="o">.</span><span class="n">event_timestamp</span><span class="p">(</span><span class="n">event_timestamp</span><span class="p">)</span>
</span><span id="L-1073"><a href="#L-1073"><span class="linenos">1073</span></a> <span class="k">if</span> <span class="n">deliver_at</span><span class="p">:</span>
</span><span id="L-1074"><a href="#L-1074"><span class="linenos">1074</span></a> <span class="n">mb</span><span class="o">.</span><span class="n">deliver_at</span><span class="p">(</span><span class="n">deliver_at</span><span class="p">)</span>
</span><span id="L-1075"><a href="#L-1075"><span class="linenos">1075</span></a> <span class="k">if</span> <span class="n">deliver_after</span><span class="p">:</span>
</span><span id="L-1076"><a href="#L-1076"><span class="linenos">1076</span></a> <span class="n">mb</span><span class="o">.</span><span class="n">deliver_after</span><span class="p">(</span><span class="n">deliver_after</span><span class="p">)</span>
</span><span id="L-1077"><a href="#L-1077"><span class="linenos">1077</span></a>
</span><span id="L-1078"><a href="#L-1078"><span class="linenos">1078</span></a> <span class="k">return</span> <span class="n">mb</span><span class="o">.</span><span class="n">build</span><span class="p">()</span>
</span><span id="L-1079"><a href="#L-1079"><span class="linenos">1079</span></a>
</span><span id="L-1080"><a href="#L-1080"><span class="linenos">1080</span></a>
</span><span id="L-1081"><a href="#L-1081"><span class="linenos">1081</span></a><span class="k">class</span> <span class="nc">Consumer</span><span class="p">:</span>
</span><span id="L-1082"><a href="#L-1082"><span class="linenos">1082</span></a> <span class="sd">&quot;&quot;&quot;</span>
</span><span id="L-1083"><a href="#L-1083"><span class="linenos">1083</span></a><span class="sd"> Pulsar consumer.</span>
</span><span id="L-1084"><a href="#L-1084"><span class="linenos">1084</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="L-1085"><a href="#L-1085"><span class="linenos">1085</span></a>
</span><span id="L-1086"><a href="#L-1086"><span class="linenos">1086</span></a> <span class="k">def</span> <span class="nf">topic</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
</span><span id="L-1087"><a href="#L-1087"><span class="linenos">1087</span></a> <span class="sd">&quot;&quot;&quot;</span>
</span><span id="L-1088"><a href="#L-1088"><span class="linenos">1088</span></a><span class="sd"> Return the topic this consumer is subscribed to.</span>
</span><span id="L-1089"><a href="#L-1089"><span class="linenos">1089</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="L-1090"><a href="#L-1090"><span class="linenos">1090</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_consumer</span><span class="o">.</span><span class="n">topic</span><span class="p">()</span>
</span><span id="L-1091"><a href="#L-1091"><span class="linenos">1091</span></a>
</span><span id="L-1092"><a href="#L-1092"><span class="linenos">1092</span></a> <span class="k">def</span> <span class="nf">subscription_name</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
</span><span id="L-1093"><a href="#L-1093"><span class="linenos">1093</span></a> <span class="sd">&quot;&quot;&quot;</span>
</span><span id="L-1094"><a href="#L-1094"><span class="linenos">1094</span></a><span class="sd"> Return the subscription name.</span>
</span><span id="L-1095"><a href="#L-1095"><span class="linenos">1095</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="L-1096"><a href="#L-1096"><span class="linenos">1096</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_consumer</span><span class="o">.</span><span class="n">subscription_name</span><span class="p">()</span>
</span><span id="L-1097"><a href="#L-1097"><span class="linenos">1097</span></a>
</span><span id="L-1098"><a href="#L-1098"><span class="linenos">1098</span></a> <span class="k">def</span> <span class="nf">unsubscribe</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
</span><span id="L-1099"><a href="#L-1099"><span class="linenos">1099</span></a> <span class="sd">&quot;&quot;&quot;</span>
</span><span id="L-1100"><a href="#L-1100"><span class="linenos">1100</span></a><span class="sd"> Unsubscribe the current consumer from the topic.</span>
</span><span id="L-1101"><a href="#L-1101"><span class="linenos">1101</span></a>
</span><span id="L-1102"><a href="#L-1102"><span class="linenos">1102</span></a><span class="sd"> This method will block until the operation is completed. Once the</span>
</span><span id="L-1103"><a href="#L-1103"><span class="linenos">1103</span></a><span class="sd"> consumer is unsubscribed, no more messages will be received and</span>
</span><span id="L-1104"><a href="#L-1104"><span class="linenos">1104</span></a><span class="sd"> subsequent new messages will not be retained for this consumer.</span>
</span><span id="L-1105"><a href="#L-1105"><span class="linenos">1105</span></a>
</span><span id="L-1106"><a href="#L-1106"><span class="linenos">1106</span></a><span class="sd"> This consumer object cannot be reused.</span>
</span><span id="L-1107"><a href="#L-1107"><span class="linenos">1107</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="L-1108"><a href="#L-1108"><span class="linenos">1108</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_consumer</span><span class="o">.</span><span class="n">unsubscribe</span><span class="p">()</span>
</span><span id="L-1109"><a href="#L-1109"><span class="linenos">1109</span></a>
</span><span id="L-1110"><a href="#L-1110"><span class="linenos">1110</span></a> <span class="k">def</span> <span class="nf">receive</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">timeout_millis</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
</span><span id="L-1111"><a href="#L-1111"><span class="linenos">1111</span></a> <span class="sd">&quot;&quot;&quot;</span>
</span><span id="L-1112"><a href="#L-1112"><span class="linenos">1112</span></a><span class="sd"> Receive a single message.</span>
</span><span id="L-1113"><a href="#L-1113"><span class="linenos">1113</span></a>
</span><span id="L-1114"><a href="#L-1114"><span class="linenos">1114</span></a><span class="sd"> If a message is not immediately available, this method will block until</span>
</span><span id="L-1115"><a href="#L-1115"><span class="linenos">1115</span></a><span class="sd"> a new message is available.</span>
</span><span id="L-1116"><a href="#L-1116"><span class="linenos">1116</span></a>
</span><span id="L-1117"><a href="#L-1117"><span class="linenos">1117</span></a><span class="sd"> **Options**</span>
</span><span id="L-1118"><a href="#L-1118"><span class="linenos">1118</span></a>
</span><span id="L-1119"><a href="#L-1119"><span class="linenos">1119</span></a><span class="sd"> * `timeout_millis`:</span>
</span><span id="L-1120"><a href="#L-1120"><span class="linenos">1120</span></a><span class="sd"> If specified, the receive will raise an exception if a message is not</span>
</span><span id="L-1121"><a href="#L-1121"><span class="linenos">1121</span></a><span class="sd"> available within the timeout.</span>
</span><span id="L-1122"><a href="#L-1122"><span class="linenos">1122</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="L-1123"><a href="#L-1123"><span class="linenos">1123</span></a> <span class="k">if</span> <span class="n">timeout_millis</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
</span><span id="L-1124"><a href="#L-1124"><span class="linenos">1124</span></a> <span class="n">msg</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_consumer</span><span class="o">.</span><span class="n">receive</span><span class="p">()</span>
</span><span id="L-1125"><a href="#L-1125"><span class="linenos">1125</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="L-1126"><a href="#L-1126"><span class="linenos">1126</span></a> <span class="n">_check_type</span><span class="p">(</span><span class="nb">int</span><span class="p">,</span> <span class="n">timeout_millis</span><span class="p">,</span> <span class="s1">&#39;timeout_millis&#39;</span><span class="p">)</span>
</span><span id="L-1127"><a href="#L-1127"><span class="linenos">1127</span></a> <span class="n">msg</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_consumer</span><span class="o">.</span><span class="n">receive</span><span class="p">(</span><span class="n">timeout_millis</span><span class="p">)</span>
</span><span id="L-1128"><a href="#L-1128"><span class="linenos">1128</span></a>
</span><span id="L-1129"><a href="#L-1129"><span class="linenos">1129</span></a> <span class="n">m</span> <span class="o">=</span> <span class="n">Message</span><span class="p">()</span>
</span><span id="L-1130"><a href="#L-1130"><span class="linenos">1130</span></a> <span class="n">m</span><span class="o">.</span><span class="n">_message</span> <span class="o">=</span> <span class="n">msg</span>
</span><span id="L-1131"><a href="#L-1131"><span class="linenos">1131</span></a> <span class="n">m</span><span class="o">.</span><span class="n">_schema</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_schema</span>
</span><span id="L-1132"><a href="#L-1132"><span class="linenos">1132</span></a> <span class="k">return</span> <span class="n">m</span>
</span><span id="L-1133"><a href="#L-1133"><span class="linenos">1133</span></a>
</span><span id="L-1134"><a href="#L-1134"><span class="linenos">1134</span></a> <span class="k">def</span> <span class="nf">acknowledge</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">message</span><span class="p">):</span>
</span><span id="L-1135"><a href="#L-1135"><span class="linenos">1135</span></a> <span class="sd">&quot;&quot;&quot;</span>
</span><span id="L-1136"><a href="#L-1136"><span class="linenos">1136</span></a><span class="sd"> Acknowledge the reception of a single message.</span>
</span><span id="L-1137"><a href="#L-1137"><span class="linenos">1137</span></a>
</span><span id="L-1138"><a href="#L-1138"><span class="linenos">1138</span></a><span class="sd"> This method will block until an acknowledgement is sent to the broker.</span>
</span><span id="L-1139"><a href="#L-1139"><span class="linenos">1139</span></a><span class="sd"> After that, the message will not be re-delivered to this consumer.</span>
</span><span id="L-1140"><a href="#L-1140"><span class="linenos">1140</span></a>
</span><span id="L-1141"><a href="#L-1141"><span class="linenos">1141</span></a><span class="sd"> **Args**</span>
</span><span id="L-1142"><a href="#L-1142"><span class="linenos">1142</span></a>
</span><span id="L-1143"><a href="#L-1143"><span class="linenos">1143</span></a><span class="sd"> * `message`:</span>
</span><span id="L-1144"><a href="#L-1144"><span class="linenos">1144</span></a><span class="sd"> The received message or message id.</span>
</span><span id="L-1145"><a href="#L-1145"><span class="linenos">1145</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="L-1146"><a href="#L-1146"><span class="linenos">1146</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">message</span><span class="p">,</span> <span class="n">Message</span><span class="p">):</span>
</span><span id="L-1147"><a href="#L-1147"><span class="linenos">1147</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_consumer</span><span class="o">.</span><span class="n">acknowledge</span><span class="p">(</span><span class="n">message</span><span class="o">.</span><span class="n">_message</span><span class="p">)</span>
</span><span id="L-1148"><a href="#L-1148"><span class="linenos">1148</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="L-1149"><a href="#L-1149"><span class="linenos">1149</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_consumer</span><span class="o">.</span><span class="n">acknowledge</span><span class="p">(</span><span class="n">message</span><span class="p">)</span>
</span><span id="L-1150"><a href="#L-1150"><span class="linenos">1150</span></a>
</span><span id="L-1151"><a href="#L-1151"><span class="linenos">1151</span></a> <span class="k">def</span> <span class="nf">acknowledge_cumulative</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">message</span><span class="p">):</span>
</span><span id="L-1152"><a href="#L-1152"><span class="linenos">1152</span></a> <span class="sd">&quot;&quot;&quot;</span>
</span><span id="L-1153"><a href="#L-1153"><span class="linenos">1153</span></a><span class="sd"> Acknowledge the reception of all the messages in the stream up to (and</span>
</span><span id="L-1154"><a href="#L-1154"><span class="linenos">1154</span></a><span class="sd"> including) the provided message.</span>
</span><span id="L-1155"><a href="#L-1155"><span class="linenos">1155</span></a>
</span><span id="L-1156"><a href="#L-1156"><span class="linenos">1156</span></a><span class="sd"> This method will block until an acknowledgement is sent to the broker.</span>
</span><span id="L-1157"><a href="#L-1157"><span class="linenos">1157</span></a><span class="sd"> After that, the messages will not be re-delivered to this consumer.</span>
</span><span id="L-1158"><a href="#L-1158"><span class="linenos">1158</span></a>
</span><span id="L-1159"><a href="#L-1159"><span class="linenos">1159</span></a><span class="sd"> **Args**</span>
</span><span id="L-1160"><a href="#L-1160"><span class="linenos">1160</span></a>
</span><span id="L-1161"><a href="#L-1161"><span class="linenos">1161</span></a><span class="sd"> * `message`:</span>
</span><span id="L-1162"><a href="#L-1162"><span class="linenos">1162</span></a><span class="sd"> The received message or message id.</span>
</span><span id="L-1163"><a href="#L-1163"><span class="linenos">1163</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="L-1164"><a href="#L-1164"><span class="linenos">1164</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">message</span><span class="p">,</span> <span class="n">Message</span><span class="p">):</span>
</span><span id="L-1165"><a href="#L-1165"><span class="linenos">1165</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_consumer</span><span class="o">.</span><span class="n">acknowledge_cumulative</span><span class="p">(</span><span class="n">message</span><span class="o">.</span><span class="n">_message</span><span class="p">)</span>
</span><span id="L-1166"><a href="#L-1166"><span class="linenos">1166</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="L-1167"><a href="#L-1167"><span class="linenos">1167</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_consumer</span><span class="o">.</span><span class="n">acknowledge_cumulative</span><span class="p">(</span><span class="n">message</span><span class="p">)</span>
</span><span id="L-1168"><a href="#L-1168"><span class="linenos">1168</span></a>
</span><span id="L-1169"><a href="#L-1169"><span class="linenos">1169</span></a> <span class="k">def</span> <span class="nf">negative_acknowledge</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">message</span><span class="p">):</span>
</span><span id="L-1170"><a href="#L-1170"><span class="linenos">1170</span></a> <span class="sd">&quot;&quot;&quot;</span>
</span><span id="L-1171"><a href="#L-1171"><span class="linenos">1171</span></a><span class="sd"> Acknowledge the failure to process a single message.</span>
</span><span id="L-1172"><a href="#L-1172"><span class="linenos">1172</span></a>
</span><span id="L-1173"><a href="#L-1173"><span class="linenos">1173</span></a><span class="sd"> When a message is &quot;negatively acked&quot; it will be marked for redelivery after</span>
</span><span id="L-1174"><a href="#L-1174"><span class="linenos">1174</span></a><span class="sd"> some fixed delay. The delay is configurable when constructing the consumer</span>
</span><span id="L-1175"><a href="#L-1175"><span class="linenos">1175</span></a><span class="sd"> with {@link ConsumerConfiguration#setNegativeAckRedeliveryDelayMs}.</span>
</span><span id="L-1176"><a href="#L-1176"><span class="linenos">1176</span></a>
</span><span id="L-1177"><a href="#L-1177"><span class="linenos">1177</span></a><span class="sd"> This call is not blocking.</span>
</span><span id="L-1178"><a href="#L-1178"><span class="linenos">1178</span></a>
</span><span id="L-1179"><a href="#L-1179"><span class="linenos">1179</span></a><span class="sd"> **Args**</span>
</span><span id="L-1180"><a href="#L-1180"><span class="linenos">1180</span></a>
</span><span id="L-1181"><a href="#L-1181"><span class="linenos">1181</span></a><span class="sd"> * `message`:</span>
</span><span id="L-1182"><a href="#L-1182"><span class="linenos">1182</span></a><span class="sd"> The received message or message id.</span>
</span><span id="L-1183"><a href="#L-1183"><span class="linenos">1183</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="L-1184"><a href="#L-1184"><span class="linenos">1184</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">message</span><span class="p">,</span> <span class="n">Message</span><span class="p">):</span>
</span><span id="L-1185"><a href="#L-1185"><span class="linenos">1185</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_consumer</span><span class="o">.</span><span class="n">negative_acknowledge</span><span class="p">(</span><span class="n">message</span><span class="o">.</span><span class="n">_message</span><span class="p">)</span>
</span><span id="L-1186"><a href="#L-1186"><span class="linenos">1186</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="L-1187"><a href="#L-1187"><span class="linenos">1187</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_consumer</span><span class="o">.</span><span class="n">negative_acknowledge</span><span class="p">(</span><span class="n">message</span><span class="p">)</span>
</span><span id="L-1188"><a href="#L-1188"><span class="linenos">1188</span></a>
</span><span id="L-1189"><a href="#L-1189"><span class="linenos">1189</span></a> <span class="k">def</span> <span class="nf">pause_message_listener</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
</span><span id="L-1190"><a href="#L-1190"><span class="linenos">1190</span></a> <span class="sd">&quot;&quot;&quot;</span>
</span><span id="L-1191"><a href="#L-1191"><span class="linenos">1191</span></a><span class="sd"> Pause receiving messages via the `message_listener` until</span>
</span><span id="L-1192"><a href="#L-1192"><span class="linenos">1192</span></a><span class="sd"> `resume_message_listener()` is called.</span>
</span><span id="L-1193"><a href="#L-1193"><span class="linenos">1193</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="L-1194"><a href="#L-1194"><span class="linenos">1194</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_consumer</span><span class="o">.</span><span class="n">pause_message_listener</span><span class="p">()</span>
</span><span id="L-1195"><a href="#L-1195"><span class="linenos">1195</span></a>
</span><span id="L-1196"><a href="#L-1196"><span class="linenos">1196</span></a> <span class="k">def</span> <span class="nf">resume_message_listener</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
</span><span id="L-1197"><a href="#L-1197"><span class="linenos">1197</span></a> <span class="sd">&quot;&quot;&quot;</span>
</span><span id="L-1198"><a href="#L-1198"><span class="linenos">1198</span></a><span class="sd"> Resume receiving the messages via the message listener.</span>
</span><span id="L-1199"><a href="#L-1199"><span class="linenos">1199</span></a><span class="sd"> Asynchronously receive all the messages enqueued from the time</span>
</span><span id="L-1200"><a href="#L-1200"><span class="linenos">1200</span></a><span class="sd"> `pause_message_listener()` was called.</span>
</span><span id="L-1201"><a href="#L-1201"><span class="linenos">1201</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="L-1202"><a href="#L-1202"><span class="linenos">1202</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_consumer</span><span class="o">.</span><span class="n">resume_message_listener</span><span class="p">()</span>
</span><span id="L-1203"><a href="#L-1203"><span class="linenos">1203</span></a>
</span><span id="L-1204"><a href="#L-1204"><span class="linenos">1204</span></a> <span class="k">def</span> <span class="nf">redeliver_unacknowledged_messages</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
</span><span id="L-1205"><a href="#L-1205"><span class="linenos">1205</span></a> <span class="sd">&quot;&quot;&quot;</span>
</span><span id="L-1206"><a href="#L-1206"><span class="linenos">1206</span></a><span class="sd"> Redelivers all the unacknowledged messages. In failover mode, the</span>
</span><span id="L-1207"><a href="#L-1207"><span class="linenos">1207</span></a><span class="sd"> request is ignored if the consumer is not active for the given topic. In</span>
</span><span id="L-1208"><a href="#L-1208"><span class="linenos">1208</span></a><span class="sd"> shared mode, the consumer&#39;s messages to be redelivered are distributed</span>
</span><span id="L-1209"><a href="#L-1209"><span class="linenos">1209</span></a><span class="sd"> across all the connected consumers. This is a non-blocking call and</span>
</span><span id="L-1210"><a href="#L-1210"><span class="linenos">1210</span></a><span class="sd"> doesn&#39;t throw an exception. In case the connection breaks, the messages</span>
</span><span id="L-1211"><a href="#L-1211"><span class="linenos">1211</span></a><span class="sd"> are redelivered after reconnect.</span>
</span><span id="L-1212"><a href="#L-1212"><span class="linenos">1212</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="L-1213"><a href="#L-1213"><span class="linenos">1213</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_consumer</span><span class="o">.</span><span class="n">redeliver_unacknowledged_messages</span><span class="p">()</span>
</span><span id="L-1214"><a href="#L-1214"><span class="linenos">1214</span></a>
</span><span id="L-1215"><a href="#L-1215"><span class="linenos">1215</span></a> <span class="k">def</span> <span class="nf">seek</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">messageid</span><span class="p">):</span>
</span><span id="L-1216"><a href="#L-1216"><span class="linenos">1216</span></a> <span class="sd">&quot;&quot;&quot;</span>
</span><span id="L-1217"><a href="#L-1217"><span class="linenos">1217</span></a><span class="sd"> Reset the subscription associated with this consumer to a specific message id or publish timestamp.</span>
</span><span id="L-1218"><a href="#L-1218"><span class="linenos">1218</span></a><span class="sd"> The message id can either be a specific message or represent the first or last messages in the topic.</span>
</span><span id="L-1219"><a href="#L-1219"><span class="linenos">1219</span></a><span class="sd"> Note: this operation can only be done on non-partitioned topics. For these, one can rather perform the</span>
</span><span id="L-1220"><a href="#L-1220"><span class="linenos">1220</span></a><span class="sd"> seek() on the individual partitions.</span>
</span><span id="L-1221"><a href="#L-1221"><span class="linenos">1221</span></a>
</span><span id="L-1222"><a href="#L-1222"><span class="linenos">1222</span></a><span class="sd"> **Args**</span>
</span><span id="L-1223"><a href="#L-1223"><span class="linenos">1223</span></a>
</span><span id="L-1224"><a href="#L-1224"><span class="linenos">1224</span></a><span class="sd"> * `message`:</span>
</span><span id="L-1225"><a href="#L-1225"><span class="linenos">1225</span></a><span class="sd"> The message id for seek, OR an integer event time to seek to</span>
</span><span id="L-1226"><a href="#L-1226"><span class="linenos">1226</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="L-1227"><a href="#L-1227"><span class="linenos">1227</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_consumer</span><span class="o">.</span><span class="n">seek</span><span class="p">(</span><span class="n">messageid</span><span class="p">)</span>
</span><span id="L-1228"><a href="#L-1228"><span class="linenos">1228</span></a>
</span><span id="L-1229"><a href="#L-1229"><span class="linenos">1229</span></a> <span class="k">def</span> <span class="nf">close</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
</span><span id="L-1230"><a href="#L-1230"><span class="linenos">1230</span></a> <span class="sd">&quot;&quot;&quot;</span>
</span><span id="L-1231"><a href="#L-1231"><span class="linenos">1231</span></a><span class="sd"> Close the consumer.</span>
</span><span id="L-1232"><a href="#L-1232"><span class="linenos">1232</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="L-1233"><a href="#L-1233"><span class="linenos">1233</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_consumer</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
</span><span id="L-1234"><a href="#L-1234"><span class="linenos">1234</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_client</span><span class="o">.</span><span class="n">_consumers</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>
</span><span id="L-1235"><a href="#L-1235"><span class="linenos">1235</span></a>
</span><span id="L-1236"><a href="#L-1236"><span class="linenos">1236</span></a>
</span><span id="L-1237"><a href="#L-1237"><span class="linenos">1237</span></a><span class="k">class</span> <span class="nc">Reader</span><span class="p">:</span>
</span><span id="L-1238"><a href="#L-1238"><span class="linenos">1238</span></a> <span class="sd">&quot;&quot;&quot;</span>
</span><span id="L-1239"><a href="#L-1239"><span class="linenos">1239</span></a><span class="sd"> Pulsar topic reader.</span>
</span><span id="L-1240"><a href="#L-1240"><span class="linenos">1240</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="L-1241"><a href="#L-1241"><span class="linenos">1241</span></a>
</span><span id="L-1242"><a href="#L-1242"><span class="linenos">1242</span></a> <span class="k">def</span> <span class="nf">topic</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
</span><span id="L-1243"><a href="#L-1243"><span class="linenos">1243</span></a> <span class="sd">&quot;&quot;&quot;</span>
</span><span id="L-1244"><a href="#L-1244"><span class="linenos">1244</span></a><span class="sd"> Return the topic this reader is reading from.</span>
</span><span id="L-1245"><a href="#L-1245"><span class="linenos">1245</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="L-1246"><a href="#L-1246"><span class="linenos">1246</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_reader</span><span class="o">.</span><span class="n">topic</span><span class="p">()</span>
</span><span id="L-1247"><a href="#L-1247"><span class="linenos">1247</span></a>
</span><span id="L-1248"><a href="#L-1248"><span class="linenos">1248</span></a> <span class="k">def</span> <span class="nf">read_next</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">timeout_millis</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
</span><span id="L-1249"><a href="#L-1249"><span class="linenos">1249</span></a> <span class="sd">&quot;&quot;&quot;</span>
</span><span id="L-1250"><a href="#L-1250"><span class="linenos">1250</span></a><span class="sd"> Read a single message.</span>
</span><span id="L-1251"><a href="#L-1251"><span class="linenos">1251</span></a>
</span><span id="L-1252"><a href="#L-1252"><span class="linenos">1252</span></a><span class="sd"> If a message is not immediately available, this method will block until</span>
</span><span id="L-1253"><a href="#L-1253"><span class="linenos">1253</span></a><span class="sd"> a new message is available.</span>
</span><span id="L-1254"><a href="#L-1254"><span class="linenos">1254</span></a>
</span><span id="L-1255"><a href="#L-1255"><span class="linenos">1255</span></a><span class="sd"> **Options**</span>
</span><span id="L-1256"><a href="#L-1256"><span class="linenos">1256</span></a>
</span><span id="L-1257"><a href="#L-1257"><span class="linenos">1257</span></a><span class="sd"> * `timeout_millis`:</span>
</span><span id="L-1258"><a href="#L-1258"><span class="linenos">1258</span></a><span class="sd"> If specified, the receive will raise an exception if a message is not</span>
</span><span id="L-1259"><a href="#L-1259"><span class="linenos">1259</span></a><span class="sd"> available within the timeout.</span>
</span><span id="L-1260"><a href="#L-1260"><span class="linenos">1260</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="L-1261"><a href="#L-1261"><span class="linenos">1261</span></a> <span class="k">if</span> <span class="n">timeout_millis</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
</span><span id="L-1262"><a href="#L-1262"><span class="linenos">1262</span></a> <span class="n">msg</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_reader</span><span class="o">.</span><span class="n">read_next</span><span class="p">()</span>
</span><span id="L-1263"><a href="#L-1263"><span class="linenos">1263</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="L-1264"><a href="#L-1264"><span class="linenos">1264</span></a> <span class="n">_check_type</span><span class="p">(</span><span class="nb">int</span><span class="p">,</span> <span class="n">timeout_millis</span><span class="p">,</span> <span class="s1">&#39;timeout_millis&#39;</span><span class="p">)</span>
</span><span id="L-1265"><a href="#L-1265"><span class="linenos">1265</span></a> <span class="n">msg</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_reader</span><span class="o">.</span><span class="n">read_next</span><span class="p">(</span><span class="n">timeout_millis</span><span class="p">)</span>
</span><span id="L-1266"><a href="#L-1266"><span class="linenos">1266</span></a>
</span><span id="L-1267"><a href="#L-1267"><span class="linenos">1267</span></a> <span class="n">m</span> <span class="o">=</span> <span class="n">Message</span><span class="p">()</span>
</span><span id="L-1268"><a href="#L-1268"><span class="linenos">1268</span></a> <span class="n">m</span><span class="o">.</span><span class="n">_message</span> <span class="o">=</span> <span class="n">msg</span>
</span><span id="L-1269"><a href="#L-1269"><span class="linenos">1269</span></a> <span class="n">m</span><span class="o">.</span><span class="n">_schema</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_schema</span>
</span><span id="L-1270"><a href="#L-1270"><span class="linenos">1270</span></a> <span class="k">return</span> <span class="n">m</span>
</span><span id="L-1271"><a href="#L-1271"><span class="linenos">1271</span></a>
</span><span id="L-1272"><a href="#L-1272"><span class="linenos">1272</span></a> <span class="k">def</span> <span class="nf">has_message_available</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
</span><span id="L-1273"><a href="#L-1273"><span class="linenos">1273</span></a> <span class="sd">&quot;&quot;&quot;</span>
</span><span id="L-1274"><a href="#L-1274"><span class="linenos">1274</span></a><span class="sd"> Check if there is any message available to read from the current position.</span>
</span><span id="L-1275"><a href="#L-1275"><span class="linenos">1275</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="L-1276"><a href="#L-1276"><span class="linenos">1276</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_reader</span><span class="o">.</span><span class="n">has_message_available</span><span class="p">();</span>
</span><span id="L-1277"><a href="#L-1277"><span class="linenos">1277</span></a>
</span><span id="L-1278"><a href="#L-1278"><span class="linenos">1278</span></a> <span class="k">def</span> <span class="nf">seek</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">messageid</span><span class="p">):</span>
</span><span id="L-1279"><a href="#L-1279"><span class="linenos">1279</span></a> <span class="sd">&quot;&quot;&quot;</span>
</span><span id="L-1280"><a href="#L-1280"><span class="linenos">1280</span></a><span class="sd"> Reset this reader to a specific message id or publish timestamp.</span>
</span><span id="L-1281"><a href="#L-1281"><span class="linenos">1281</span></a><span class="sd"> The message id can either be a specific message or represent the first or last messages in the topic.</span>
</span><span id="L-1282"><a href="#L-1282"><span class="linenos">1282</span></a><span class="sd"> Note: this operation can only be done on non-partitioned topics. For these, one can rather perform the</span>
</span><span id="L-1283"><a href="#L-1283"><span class="linenos">1283</span></a><span class="sd"> seek() on the individual partitions.</span>
</span><span id="L-1284"><a href="#L-1284"><span class="linenos">1284</span></a>
</span><span id="L-1285"><a href="#L-1285"><span class="linenos">1285</span></a><span class="sd"> **Args**</span>
</span><span id="L-1286"><a href="#L-1286"><span class="linenos">1286</span></a>
</span><span id="L-1287"><a href="#L-1287"><span class="linenos">1287</span></a><span class="sd"> * `message`:</span>
</span><span id="L-1288"><a href="#L-1288"><span class="linenos">1288</span></a><span class="sd"> The message id for seek, OR an integer event time to seek to</span>
</span><span id="L-1289"><a href="#L-1289"><span class="linenos">1289</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="L-1290"><a href="#L-1290"><span class="linenos">1290</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_reader</span><span class="o">.</span><span class="n">seek</span><span class="p">(</span><span class="n">messageid</span><span class="p">)</span>
</span><span id="L-1291"><a href="#L-1291"><span class="linenos">1291</span></a>
</span><span id="L-1292"><a href="#L-1292"><span class="linenos">1292</span></a> <span class="k">def</span> <span class="nf">close</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
</span><span id="L-1293"><a href="#L-1293"><span class="linenos">1293</span></a> <span class="sd">&quot;&quot;&quot;</span>
</span><span id="L-1294"><a href="#L-1294"><span class="linenos">1294</span></a><span class="sd"> Close the reader.</span>
</span><span id="L-1295"><a href="#L-1295"><span class="linenos">1295</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="L-1296"><a href="#L-1296"><span class="linenos">1296</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_reader</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
</span><span id="L-1297"><a href="#L-1297"><span class="linenos">1297</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_client</span><span class="o">.</span><span class="n">_consumers</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>
</span><span id="L-1298"><a href="#L-1298"><span class="linenos">1298</span></a>
</span><span id="L-1299"><a href="#L-1299"><span class="linenos">1299</span></a><span class="k">class</span> <span class="nc">CryptoKeyReader</span><span class="p">:</span>
</span><span id="L-1300"><a href="#L-1300"><span class="linenos">1300</span></a> <span class="sd">&quot;&quot;&quot;</span>
</span><span id="L-1301"><a href="#L-1301"><span class="linenos">1301</span></a><span class="sd"> Default crypto key reader implementation</span>
</span><span id="L-1302"><a href="#L-1302"><span class="linenos">1302</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="L-1303"><a href="#L-1303"><span class="linenos">1303</span></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">public_key_path</span><span class="p">,</span> <span class="n">private_key_path</span><span class="p">):</span>
</span><span id="L-1304"><a href="#L-1304"><span class="linenos">1304</span></a> <span class="sd">&quot;&quot;&quot;</span>
</span><span id="L-1305"><a href="#L-1305"><span class="linenos">1305</span></a><span class="sd"> Create crypto key reader.</span>
</span><span id="L-1306"><a href="#L-1306"><span class="linenos">1306</span></a>
</span><span id="L-1307"><a href="#L-1307"><span class="linenos">1307</span></a><span class="sd"> **Args**</span>
</span><span id="L-1308"><a href="#L-1308"><span class="linenos">1308</span></a>
</span><span id="L-1309"><a href="#L-1309"><span class="linenos">1309</span></a><span class="sd"> * `public_key_path`: Path to the public key</span>
</span><span id="L-1310"><a href="#L-1310"><span class="linenos">1310</span></a><span class="sd"> * `private_key_path`: Path to private key</span>
</span><span id="L-1311"><a href="#L-1311"><span class="linenos">1311</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="L-1312"><a href="#L-1312"><span class="linenos">1312</span></a> <span class="n">_check_type</span><span class="p">(</span><span class="nb">str</span><span class="p">,</span> <span class="n">public_key_path</span><span class="p">,</span> <span class="s1">&#39;public_key_path&#39;</span><span class="p">)</span>
</span><span id="L-1313"><a href="#L-1313"><span class="linenos">1313</span></a> <span class="n">_check_type</span><span class="p">(</span><span class="nb">str</span><span class="p">,</span> <span class="n">private_key_path</span><span class="p">,</span> <span class="s1">&#39;private_key_path&#39;</span><span class="p">)</span>
</span><span id="L-1314"><a href="#L-1314"><span class="linenos">1314</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">cryptoKeyReader</span> <span class="o">=</span> <span class="n">_pulsar</span><span class="o">.</span><span class="n">CryptoKeyReader</span><span class="p">(</span><span class="n">public_key_path</span><span class="p">,</span> <span class="n">private_key_path</span><span class="p">)</span>
</span><span id="L-1315"><a href="#L-1315"><span class="linenos">1315</span></a>
</span><span id="L-1316"><a href="#L-1316"><span class="linenos">1316</span></a><span class="k">def</span> <span class="nf">_check_type</span><span class="p">(</span><span class="n">var_type</span><span class="p">,</span> <span class="n">var</span><span class="p">,</span> <span class="n">name</span><span class="p">):</span>
</span><span id="L-1317"><a href="#L-1317"><span class="linenos">1317</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">var</span><span class="p">,</span> <span class="n">var_type</span><span class="p">):</span>
</span><span id="L-1318"><a href="#L-1318"><span class="linenos">1318</span></a> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">&quot;Argument </span><span class="si">%s</span><span class="s2"> is expected to be of type &#39;</span><span class="si">%s</span><span class="s2">&#39; and not &#39;</span><span class="si">%s</span><span class="s2">&#39;&quot;</span>
</span><span id="L-1319"><a href="#L-1319"><span class="linenos">1319</span></a> <span class="o">%</span> <span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">var_type</span><span class="o">.</span><span class="vm">__name__</span><span class="p">,</span> <span class="nb">type</span><span class="p">(</span><span class="n">var</span><span class="p">)</span><span class="o">.</span><span class="vm">__name__</span><span class="p">))</span>
</span><span id="L-1320"><a href="#L-1320"><span class="linenos">1320</span></a>
</span><span id="L-1321"><a href="#L-1321"><span class="linenos">1321</span></a>
</span><span id="L-1322"><a href="#L-1322"><span class="linenos">1322</span></a><span class="k">def</span> <span class="nf">_check_type_or_none</span><span class="p">(</span><span class="n">var_type</span><span class="p">,</span> <span class="n">var</span><span class="p">,</span> <span class="n">name</span><span class="p">):</span>
</span><span id="L-1323"><a href="#L-1323"><span class="linenos">1323</span></a> <span class="k">if</span> <span class="n">var</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="ow">and</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">var</span><span class="p">,</span> <span class="n">var_type</span><span class="p">):</span>
</span><span id="L-1324"><a href="#L-1324"><span class="linenos">1324</span></a> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">&quot;Argument </span><span class="si">%s</span><span class="s2"> is expected to be either None or of type &#39;</span><span class="si">%s</span><span class="s2">&#39;&quot;</span>
</span><span id="L-1325"><a href="#L-1325"><span class="linenos">1325</span></a> <span class="o">%</span> <span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">var_type</span><span class="o">.</span><span class="vm">__name__</span><span class="p">))</span>
</span><span id="L-1326"><a href="#L-1326"><span class="linenos">1326</span></a>
</span><span id="L-1327"><a href="#L-1327"><span class="linenos">1327</span></a>
</span><span id="L-1328"><a href="#L-1328"><span class="linenos">1328</span></a><span class="k">def</span> <span class="nf">_listener_wrapper</span><span class="p">(</span><span class="n">listener</span><span class="p">,</span> <span class="n">schema</span><span class="p">):</span>
</span><span id="L-1329"><a href="#L-1329"><span class="linenos">1329</span></a> <span class="k">def</span> <span class="nf">wrapper</span><span class="p">(</span><span class="n">consumer</span><span class="p">,</span> <span class="n">msg</span><span class="p">):</span>
</span><span id="L-1330"><a href="#L-1330"><span class="linenos">1330</span></a> <span class="n">c</span> <span class="o">=</span> <span class="n">Consumer</span><span class="p">()</span>
</span><span id="L-1331"><a href="#L-1331"><span class="linenos">1331</span></a> <span class="n">c</span><span class="o">.</span><span class="n">_consumer</span> <span class="o">=</span> <span class="n">consumer</span>
</span><span id="L-1332"><a href="#L-1332"><span class="linenos">1332</span></a> <span class="n">m</span> <span class="o">=</span> <span class="n">Message</span><span class="p">()</span>
</span><span id="L-1333"><a href="#L-1333"><span class="linenos">1333</span></a> <span class="n">m</span><span class="o">.</span><span class="n">_message</span> <span class="o">=</span> <span class="n">msg</span>
</span><span id="L-1334"><a href="#L-1334"><span class="linenos">1334</span></a> <span class="n">m</span><span class="o">.</span><span class="n">_schema</span> <span class="o">=</span> <span class="n">schema</span>
</span><span id="L-1335"><a href="#L-1335"><span class="linenos">1335</span></a> <span class="n">listener</span><span class="p">(</span><span class="n">c</span><span class="p">,</span> <span class="n">m</span><span class="p">)</span>
</span><span id="L-1336"><a href="#L-1336"><span class="linenos">1336</span></a> <span class="k">return</span> <span class="n">wrapper</span>
</span></pre></div>
</section>
<section id="MessageId">
<input id="MessageId-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<div class="attr class">
<span class="def">class</span>
<span class="name">MessageId</span>:
<label class="view-source-button" for="MessageId-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#MessageId"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="MessageId-123"><a href="#MessageId-123"><span class="linenos">123</span></a><span class="k">class</span> <span class="nc">MessageId</span><span class="p">:</span>
</span><span id="MessageId-124"><a href="#MessageId-124"><span class="linenos">124</span></a> <span class="sd">&quot;&quot;&quot;</span>
</span><span id="MessageId-125"><a href="#MessageId-125"><span class="linenos">125</span></a><span class="sd"> Represents a message id</span>
</span><span id="MessageId-126"><a href="#MessageId-126"><span class="linenos">126</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="MessageId-127"><a href="#MessageId-127"><span class="linenos">127</span></a>
</span><span id="MessageId-128"><a href="#MessageId-128"><span class="linenos">128</span></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">partition</span><span class="o">=-</span><span class="mi">1</span><span class="p">,</span> <span class="n">ledger_id</span><span class="o">=-</span><span class="mi">1</span><span class="p">,</span> <span class="n">entry_id</span><span class="o">=-</span><span class="mi">1</span><span class="p">,</span> <span class="n">batch_index</span><span class="o">=-</span><span class="mi">1</span><span class="p">):</span>
</span><span id="MessageId-129"><a href="#MessageId-129"><span class="linenos">129</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_msg_id</span> <span class="o">=</span> <span class="n">_pulsar</span><span class="o">.</span><span class="n">MessageId</span><span class="p">(</span><span class="n">partition</span><span class="p">,</span> <span class="n">ledger_id</span><span class="p">,</span> <span class="n">entry_id</span><span class="p">,</span> <span class="n">batch_index</span><span class="p">)</span>
</span><span id="MessageId-130"><a href="#MessageId-130"><span class="linenos">130</span></a>
</span><span id="MessageId-131"><a href="#MessageId-131"><span class="linenos">131</span></a> <span class="s1">&#39;Represents the earliest message stored in a topic&#39;</span>
</span><span id="MessageId-132"><a href="#MessageId-132"><span class="linenos">132</span></a> <span class="n">earliest</span> <span class="o">=</span> <span class="n">_pulsar</span><span class="o">.</span><span class="n">MessageId</span><span class="o">.</span><span class="n">earliest</span>
</span><span id="MessageId-133"><a href="#MessageId-133"><span class="linenos">133</span></a>
</span><span id="MessageId-134"><a href="#MessageId-134"><span class="linenos">134</span></a> <span class="s1">&#39;Represents the latest message published on a topic&#39;</span>
</span><span id="MessageId-135"><a href="#MessageId-135"><span class="linenos">135</span></a> <span class="n">latest</span> <span class="o">=</span> <span class="n">_pulsar</span><span class="o">.</span><span class="n">MessageId</span><span class="o">.</span><span class="n">latest</span>
</span><span id="MessageId-136"><a href="#MessageId-136"><span class="linenos">136</span></a>
</span><span id="MessageId-137"><a href="#MessageId-137"><span class="linenos">137</span></a> <span class="k">def</span> <span class="nf">ledger_id</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
</span><span id="MessageId-138"><a href="#MessageId-138"><span class="linenos">138</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_msg_id</span><span class="o">.</span><span class="n">ledger_id</span><span class="p">()</span>
</span><span id="MessageId-139"><a href="#MessageId-139"><span class="linenos">139</span></a>
</span><span id="MessageId-140"><a href="#MessageId-140"><span class="linenos">140</span></a> <span class="k">def</span> <span class="nf">entry_id</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
</span><span id="MessageId-141"><a href="#MessageId-141"><span class="linenos">141</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_msg_id</span><span class="o">.</span><span class="n">entry_id</span><span class="p">()</span>
</span><span id="MessageId-142"><a href="#MessageId-142"><span class="linenos">142</span></a>
</span><span id="MessageId-143"><a href="#MessageId-143"><span class="linenos">143</span></a> <span class="k">def</span> <span class="nf">batch_index</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
</span><span id="MessageId-144"><a href="#MessageId-144"><span class="linenos">144</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_msg_id</span><span class="o">.</span><span class="n">batch_index</span><span class="p">()</span>
</span><span id="MessageId-145"><a href="#MessageId-145"><span class="linenos">145</span></a>
</span><span id="MessageId-146"><a href="#MessageId-146"><span class="linenos">146</span></a> <span class="k">def</span> <span class="nf">partition</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
</span><span id="MessageId-147"><a href="#MessageId-147"><span class="linenos">147</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_msg_id</span><span class="o">.</span><span class="n">partition</span><span class="p">()</span>
</span><span id="MessageId-148"><a href="#MessageId-148"><span class="linenos">148</span></a>
</span><span id="MessageId-149"><a href="#MessageId-149"><span class="linenos">149</span></a> <span class="k">def</span> <span class="nf">serialize</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
</span><span id="MessageId-150"><a href="#MessageId-150"><span class="linenos">150</span></a> <span class="sd">&quot;&quot;&quot;</span>
</span><span id="MessageId-151"><a href="#MessageId-151"><span class="linenos">151</span></a><span class="sd"> Returns a bytes representation of the message id.</span>
</span><span id="MessageId-152"><a href="#MessageId-152"><span class="linenos">152</span></a><span class="sd"> This bytes sequence can be stored and later deserialized.</span>
</span><span id="MessageId-153"><a href="#MessageId-153"><span class="linenos">153</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="MessageId-154"><a href="#MessageId-154"><span class="linenos">154</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_msg_id</span><span class="o">.</span><span class="n">serialize</span><span class="p">()</span>
</span><span id="MessageId-155"><a href="#MessageId-155"><span class="linenos">155</span></a>
</span><span id="MessageId-156"><a href="#MessageId-156"><span class="linenos">156</span></a> <span class="nd">@staticmethod</span>
</span><span id="MessageId-157"><a href="#MessageId-157"><span class="linenos">157</span></a> <span class="k">def</span> <span class="nf">deserialize</span><span class="p">(</span><span class="n">message_id_bytes</span><span class="p">):</span>
</span><span id="MessageId-158"><a href="#MessageId-158"><span class="linenos">158</span></a> <span class="sd">&quot;&quot;&quot;</span>
</span><span id="MessageId-159"><a href="#MessageId-159"><span class="linenos">159</span></a><span class="sd"> Deserialize a message id object from a previously</span>
</span><span id="MessageId-160"><a href="#MessageId-160"><span class="linenos">160</span></a><span class="sd"> serialized bytes sequence.</span>
</span><span id="MessageId-161"><a href="#MessageId-161"><span class="linenos">161</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="MessageId-162"><a href="#MessageId-162"><span class="linenos">162</span></a> <span class="k">return</span> <span class="n">_pulsar</span><span class="o">.</span><span class="n">MessageId</span><span class="o">.</span><span class="n">deserialize</span><span class="p">(</span><span class="n">message_id_bytes</span><span class="p">)</span>
</span></pre></div>
<div class="docstring"><p>Represents a message id</p>
</div>
<div id="MessageId.__init__" class="classattr">
<input id="MessageId.__init__-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<div class="attr function">
<span class="name">MessageId</span><span class="signature pdoc-code condensed">(<span class="param"><span class="n">partition</span><span class="o">=-</span><span class="mi">1</span>, </span><span class="param"><span class="n">ledger_id</span><span class="o">=-</span><span class="mi">1</span>, </span><span class="param"><span class="n">entry_id</span><span class="o">=-</span><span class="mi">1</span>, </span><span class="param"><span class="n">batch_index</span><span class="o">=-</span><span class="mi">1</span></span>)</span>
<label class="view-source-button" for="MessageId.__init__-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#MessageId.__init__"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="MessageId.__init__-128"><a href="#MessageId.__init__-128"><span class="linenos">128</span></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">partition</span><span class="o">=-</span><span class="mi">1</span><span class="p">,</span> <span class="n">ledger_id</span><span class="o">=-</span><span class="mi">1</span><span class="p">,</span> <span class="n">entry_id</span><span class="o">=-</span><span class="mi">1</span><span class="p">,</span> <span class="n">batch_index</span><span class="o">=-</span><span class="mi">1</span><span class="p">):</span>
</span><span id="MessageId.__init__-129"><a href="#MessageId.__init__-129"><span class="linenos">129</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_msg_id</span> <span class="o">=</span> <span class="n">_pulsar</span><span class="o">.</span><span class="n">MessageId</span><span class="p">(</span><span class="n">partition</span><span class="p">,</span> <span class="n">ledger_id</span><span class="p">,</span> <span class="n">entry_id</span><span class="p">,</span> <span class="n">batch_index</span><span class="p">)</span>
</span></pre></div>
</div>
<div id="MessageId.earliest" class="classattr">
<div class="attr variable">
<span class="name">earliest</span><span class="default_value"> = &lt;_pulsar.MessageId object&gt;</span>
</div>
<a class="headerlink" href="#MessageId.earliest"></a>
<div class="docstring"><p>Represents the latest message published on a topic</p>
</div>
</div>
<div id="MessageId.ledger_id" class="classattr">
<input id="MessageId.ledger_id-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<div class="attr function">
<span class="def">def</span>
<span class="name">ledger_id</span><span class="signature pdoc-code condensed">(<span class="param"><span class="bp">self</span></span><span class="return-annotation">):</span></span>
<label class="view-source-button" for="MessageId.ledger_id-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#MessageId.ledger_id"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="MessageId.ledger_id-137"><a href="#MessageId.ledger_id-137"><span class="linenos">137</span></a> <span class="k">def</span> <span class="nf">ledger_id</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
</span><span id="MessageId.ledger_id-138"><a href="#MessageId.ledger_id-138"><span class="linenos">138</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_msg_id</span><span class="o">.</span><span class="n">ledger_id</span><span class="p">()</span>
</span></pre></div>
</div>
<div id="MessageId.entry_id" class="classattr">
<input id="MessageId.entry_id-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<div class="attr function">
<span class="def">def</span>
<span class="name">entry_id</span><span class="signature pdoc-code condensed">(<span class="param"><span class="bp">self</span></span><span class="return-annotation">):</span></span>
<label class="view-source-button" for="MessageId.entry_id-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#MessageId.entry_id"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="MessageId.entry_id-140"><a href="#MessageId.entry_id-140"><span class="linenos">140</span></a> <span class="k">def</span> <span class="nf">entry_id</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
</span><span id="MessageId.entry_id-141"><a href="#MessageId.entry_id-141"><span class="linenos">141</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_msg_id</span><span class="o">.</span><span class="n">entry_id</span><span class="p">()</span>
</span></pre></div>
</div>
<div id="MessageId.batch_index" class="classattr">
<input id="MessageId.batch_index-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<div class="attr function">
<span class="def">def</span>
<span class="name">batch_index</span><span class="signature pdoc-code condensed">(<span class="param"><span class="bp">self</span></span><span class="return-annotation">):</span></span>
<label class="view-source-button" for="MessageId.batch_index-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#MessageId.batch_index"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="MessageId.batch_index-143"><a href="#MessageId.batch_index-143"><span class="linenos">143</span></a> <span class="k">def</span> <span class="nf">batch_index</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
</span><span id="MessageId.batch_index-144"><a href="#MessageId.batch_index-144"><span class="linenos">144</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_msg_id</span><span class="o">.</span><span class="n">batch_index</span><span class="p">()</span>
</span></pre></div>
</div>
<div id="MessageId.partition" class="classattr">
<input id="MessageId.partition-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<div class="attr function">
<span class="def">def</span>
<span class="name">partition</span><span class="signature pdoc-code condensed">(<span class="param"><span class="bp">self</span></span><span class="return-annotation">):</span></span>
<label class="view-source-button" for="MessageId.partition-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#MessageId.partition"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="MessageId.partition-146"><a href="#MessageId.partition-146"><span class="linenos">146</span></a> <span class="k">def</span> <span class="nf">partition</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
</span><span id="MessageId.partition-147"><a href="#MessageId.partition-147"><span class="linenos">147</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_msg_id</span><span class="o">.</span><span class="n">partition</span><span class="p">()</span>
</span></pre></div>
</div>
<div id="MessageId.serialize" class="classattr">
<input id="MessageId.serialize-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<div class="attr function">
<span class="def">def</span>
<span class="name">serialize</span><span class="signature pdoc-code condensed">(<span class="param"><span class="bp">self</span></span><span class="return-annotation">):</span></span>
<label class="view-source-button" for="MessageId.serialize-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#MessageId.serialize"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="MessageId.serialize-149"><a href="#MessageId.serialize-149"><span class="linenos">149</span></a> <span class="k">def</span> <span class="nf">serialize</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
</span><span id="MessageId.serialize-150"><a href="#MessageId.serialize-150"><span class="linenos">150</span></a> <span class="sd">&quot;&quot;&quot;</span>
</span><span id="MessageId.serialize-151"><a href="#MessageId.serialize-151"><span class="linenos">151</span></a><span class="sd"> Returns a bytes representation of the message id.</span>
</span><span id="MessageId.serialize-152"><a href="#MessageId.serialize-152"><span class="linenos">152</span></a><span class="sd"> This bytes sequence can be stored and later deserialized.</span>
</span><span id="MessageId.serialize-153"><a href="#MessageId.serialize-153"><span class="linenos">153</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="MessageId.serialize-154"><a href="#MessageId.serialize-154"><span class="linenos">154</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_msg_id</span><span class="o">.</span><span class="n">serialize</span><span class="p">()</span>
</span></pre></div>
<div class="docstring"><p>Returns a bytes representation of the message id.
This bytes sequence can be stored and later deserialized.</p>
</div>
</div>
<div id="MessageId.deserialize" class="classattr">
<input id="MessageId.deserialize-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<div class="attr function">
<div class="decorator">@staticmethod</div>
<span class="def">def</span>
<span class="name">deserialize</span><span class="signature pdoc-code condensed">(<span class="param"><span class="n">message_id_bytes</span></span><span class="return-annotation">):</span></span>
<label class="view-source-button" for="MessageId.deserialize-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#MessageId.deserialize"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="MessageId.deserialize-156"><a href="#MessageId.deserialize-156"><span class="linenos">156</span></a> <span class="nd">@staticmethod</span>
</span><span id="MessageId.deserialize-157"><a href="#MessageId.deserialize-157"><span class="linenos">157</span></a> <span class="k">def</span> <span class="nf">deserialize</span><span class="p">(</span><span class="n">message_id_bytes</span><span class="p">):</span>
</span><span id="MessageId.deserialize-158"><a href="#MessageId.deserialize-158"><span class="linenos">158</span></a> <span class="sd">&quot;&quot;&quot;</span>
</span><span id="MessageId.deserialize-159"><a href="#MessageId.deserialize-159"><span class="linenos">159</span></a><span class="sd"> Deserialize a message id object from a previously</span>
</span><span id="MessageId.deserialize-160"><a href="#MessageId.deserialize-160"><span class="linenos">160</span></a><span class="sd"> serialized bytes sequence.</span>
</span><span id="MessageId.deserialize-161"><a href="#MessageId.deserialize-161"><span class="linenos">161</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="MessageId.deserialize-162"><a href="#MessageId.deserialize-162"><span class="linenos">162</span></a> <span class="k">return</span> <span class="n">_pulsar</span><span class="o">.</span><span class="n">MessageId</span><span class="o">.</span><span class="n">deserialize</span><span class="p">(</span><span class="n">message_id_bytes</span><span class="p">)</span>
</span></pre></div>
<div class="docstring"><p>Deserialize a message id object from a previously
serialized bytes sequence.</p>
</div>
</div>
</section>
<section id="Message">
<input id="Message-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<div class="attr class">
<span class="def">class</span>
<span class="name">Message</span>:
<label class="view-source-button" for="Message-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#Message"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="Message-165"><a href="#Message-165"><span class="linenos">165</span></a><span class="k">class</span> <span class="nc">Message</span><span class="p">:</span>
</span><span id="Message-166"><a href="#Message-166"><span class="linenos">166</span></a> <span class="sd">&quot;&quot;&quot;</span>
</span><span id="Message-167"><a href="#Message-167"><span class="linenos">167</span></a><span class="sd"> Message objects are returned by a consumer, either by calling `receive` or</span>
</span><span id="Message-168"><a href="#Message-168"><span class="linenos">168</span></a><span class="sd"> through a listener.</span>
</span><span id="Message-169"><a href="#Message-169"><span class="linenos">169</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="Message-170"><a href="#Message-170"><span class="linenos">170</span></a>
</span><span id="Message-171"><a href="#Message-171"><span class="linenos">171</span></a> <span class="k">def</span> <span class="nf">data</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
</span><span id="Message-172"><a href="#Message-172"><span class="linenos">172</span></a> <span class="sd">&quot;&quot;&quot;</span>
</span><span id="Message-173"><a href="#Message-173"><span class="linenos">173</span></a><span class="sd"> Returns object typed bytes with the payload of the message.</span>
</span><span id="Message-174"><a href="#Message-174"><span class="linenos">174</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="Message-175"><a href="#Message-175"><span class="linenos">175</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_message</span><span class="o">.</span><span class="n">data</span><span class="p">()</span>
</span><span id="Message-176"><a href="#Message-176"><span class="linenos">176</span></a>
</span><span id="Message-177"><a href="#Message-177"><span class="linenos">177</span></a> <span class="k">def</span> <span class="nf">value</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
</span><span id="Message-178"><a href="#Message-178"><span class="linenos">178</span></a> <span class="sd">&quot;&quot;&quot;</span>
</span><span id="Message-179"><a href="#Message-179"><span class="linenos">179</span></a><span class="sd"> Returns object with the de-serialized version of the message content</span>
</span><span id="Message-180"><a href="#Message-180"><span class="linenos">180</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="Message-181"><a href="#Message-181"><span class="linenos">181</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_schema</span><span class="o">.</span><span class="n">decode</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_message</span><span class="o">.</span><span class="n">data</span><span class="p">())</span>
</span><span id="Message-182"><a href="#Message-182"><span class="linenos">182</span></a>
</span><span id="Message-183"><a href="#Message-183"><span class="linenos">183</span></a> <span class="k">def</span> <span class="nf">properties</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
</span><span id="Message-184"><a href="#Message-184"><span class="linenos">184</span></a> <span class="sd">&quot;&quot;&quot;</span>
</span><span id="Message-185"><a href="#Message-185"><span class="linenos">185</span></a><span class="sd"> Return the properties attached to the message. Properties are</span>
</span><span id="Message-186"><a href="#Message-186"><span class="linenos">186</span></a><span class="sd"> application-defined key/value pairs that will be attached to the</span>
</span><span id="Message-187"><a href="#Message-187"><span class="linenos">187</span></a><span class="sd"> message.</span>
</span><span id="Message-188"><a href="#Message-188"><span class="linenos">188</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="Message-189"><a href="#Message-189"><span class="linenos">189</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_message</span><span class="o">.</span><span class="n">properties</span><span class="p">()</span>
</span><span id="Message-190"><a href="#Message-190"><span class="linenos">190</span></a>
</span><span id="Message-191"><a href="#Message-191"><span class="linenos">191</span></a> <span class="k">def</span> <span class="nf">partition_key</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
</span><span id="Message-192"><a href="#Message-192"><span class="linenos">192</span></a> <span class="sd">&quot;&quot;&quot;</span>
</span><span id="Message-193"><a href="#Message-193"><span class="linenos">193</span></a><span class="sd"> Get the partitioning key for the message.</span>
</span><span id="Message-194"><a href="#Message-194"><span class="linenos">194</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="Message-195"><a href="#Message-195"><span class="linenos">195</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_message</span><span class="o">.</span><span class="n">partition_key</span><span class="p">()</span>
</span><span id="Message-196"><a href="#Message-196"><span class="linenos">196</span></a>
</span><span id="Message-197"><a href="#Message-197"><span class="linenos">197</span></a> <span class="k">def</span> <span class="nf">publish_timestamp</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
</span><span id="Message-198"><a href="#Message-198"><span class="linenos">198</span></a> <span class="sd">&quot;&quot;&quot;</span>
</span><span id="Message-199"><a href="#Message-199"><span class="linenos">199</span></a><span class="sd"> Get the timestamp in milliseconds with the message publish time.</span>
</span><span id="Message-200"><a href="#Message-200"><span class="linenos">200</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="Message-201"><a href="#Message-201"><span class="linenos">201</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_message</span><span class="o">.</span><span class="n">publish_timestamp</span><span class="p">()</span>
</span><span id="Message-202"><a href="#Message-202"><span class="linenos">202</span></a>
</span><span id="Message-203"><a href="#Message-203"><span class="linenos">203</span></a> <span class="k">def</span> <span class="nf">event_timestamp</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
</span><span id="Message-204"><a href="#Message-204"><span class="linenos">204</span></a> <span class="sd">&quot;&quot;&quot;</span>
</span><span id="Message-205"><a href="#Message-205"><span class="linenos">205</span></a><span class="sd"> Get the timestamp in milliseconds with the message event time.</span>
</span><span id="Message-206"><a href="#Message-206"><span class="linenos">206</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="Message-207"><a href="#Message-207"><span class="linenos">207</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_message</span><span class="o">.</span><span class="n">event_timestamp</span><span class="p">()</span>
</span><span id="Message-208"><a href="#Message-208"><span class="linenos">208</span></a>
</span><span id="Message-209"><a href="#Message-209"><span class="linenos">209</span></a> <span class="k">def</span> <span class="nf">message_id</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
</span><span id="Message-210"><a href="#Message-210"><span class="linenos">210</span></a> <span class="sd">&quot;&quot;&quot;</span>
</span><span id="Message-211"><a href="#Message-211"><span class="linenos">211</span></a><span class="sd"> The message ID that can be used to refere to this particular message.</span>
</span><span id="Message-212"><a href="#Message-212"><span class="linenos">212</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="Message-213"><a href="#Message-213"><span class="linenos">213</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_message</span><span class="o">.</span><span class="n">message_id</span><span class="p">()</span>
</span><span id="Message-214"><a href="#Message-214"><span class="linenos">214</span></a>
</span><span id="Message-215"><a href="#Message-215"><span class="linenos">215</span></a> <span class="k">def</span> <span class="nf">topic_name</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
</span><span id="Message-216"><a href="#Message-216"><span class="linenos">216</span></a> <span class="sd">&quot;&quot;&quot;</span>
</span><span id="Message-217"><a href="#Message-217"><span class="linenos">217</span></a><span class="sd"> Get the topic Name from which this message originated from</span>
</span><span id="Message-218"><a href="#Message-218"><span class="linenos">218</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="Message-219"><a href="#Message-219"><span class="linenos">219</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_message</span><span class="o">.</span><span class="n">topic_name</span><span class="p">()</span>
</span><span id="Message-220"><a href="#Message-220"><span class="linenos">220</span></a>
</span><span id="Message-221"><a href="#Message-221"><span class="linenos">221</span></a> <span class="k">def</span> <span class="nf">redelivery_count</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
</span><span id="Message-222"><a href="#Message-222"><span class="linenos">222</span></a> <span class="sd">&quot;&quot;&quot;</span>
</span><span id="Message-223"><a href="#Message-223"><span class="linenos">223</span></a><span class="sd"> Get the redelivery count for this message</span>
</span><span id="Message-224"><a href="#Message-224"><span class="linenos">224</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="Message-225"><a href="#Message-225"><span class="linenos">225</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_message</span><span class="o">.</span><span class="n">redelivery_count</span><span class="p">()</span>
</span><span id="Message-226"><a href="#Message-226"><span class="linenos">226</span></a>
</span><span id="Message-227"><a href="#Message-227"><span class="linenos">227</span></a> <span class="k">def</span> <span class="nf">schema_version</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
</span><span id="Message-228"><a href="#Message-228"><span class="linenos">228</span></a> <span class="sd">&quot;&quot;&quot;</span>
</span><span id="Message-229"><a href="#Message-229"><span class="linenos">229</span></a><span class="sd"> Get the schema version for this message</span>
</span><span id="Message-230"><a href="#Message-230"><span class="linenos">230</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="Message-231"><a href="#Message-231"><span class="linenos">231</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_message</span><span class="o">.</span><span class="n">schema_version</span><span class="p">()</span>
</span><span id="Message-232"><a href="#Message-232"><span class="linenos">232</span></a>
</span><span id="Message-233"><a href="#Message-233"><span class="linenos">233</span></a> <span class="nd">@staticmethod</span>
</span><span id="Message-234"><a href="#Message-234"><span class="linenos">234</span></a> <span class="k">def</span> <span class="nf">_wrap</span><span class="p">(</span><span class="n">_message</span><span class="p">):</span>
</span><span id="Message-235"><a href="#Message-235"><span class="linenos">235</span></a> <span class="bp">self</span> <span class="o">=</span> <span class="n">Message</span><span class="p">()</span>
</span><span id="Message-236"><a href="#Message-236"><span class="linenos">236</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_message</span> <span class="o">=</span> <span class="n">_message</span>
</span><span id="Message-237"><a href="#Message-237"><span class="linenos">237</span></a> <span class="k">return</span> <span class="bp">self</span>
</span></pre></div>
<div class="docstring"><p>Message objects are returned by a consumer, either by calling <code>receive</code> or
through a listener.</p>
</div>
<div id="Message.__init__" class="classattr">
<div class="attr function">
<span class="name">Message</span><span class="signature pdoc-code condensed">()</span>
</div>
<a class="headerlink" href="#Message.__init__"></a>
</div>
<div id="Message.data" class="classattr">
<input id="Message.data-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<div class="attr function">
<span class="def">def</span>
<span class="name">data</span><span class="signature pdoc-code condensed">(<span class="param"><span class="bp">self</span></span><span class="return-annotation">):</span></span>
<label class="view-source-button" for="Message.data-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#Message.data"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="Message.data-171"><a href="#Message.data-171"><span class="linenos">171</span></a> <span class="k">def</span> <span class="nf">data</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
</span><span id="Message.data-172"><a href="#Message.data-172"><span class="linenos">172</span></a> <span class="sd">&quot;&quot;&quot;</span>
</span><span id="Message.data-173"><a href="#Message.data-173"><span class="linenos">173</span></a><span class="sd"> Returns object typed bytes with the payload of the message.</span>
</span><span id="Message.data-174"><a href="#Message.data-174"><span class="linenos">174</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="Message.data-175"><a href="#Message.data-175"><span class="linenos">175</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_message</span><span class="o">.</span><span class="n">data</span><span class="p">()</span>
</span></pre></div>
<div class="docstring"><p>Returns object typed bytes with the payload of the message.</p>
</div>
</div>
<div id="Message.value" class="classattr">
<input id="Message.value-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<div class="attr function">
<span class="def">def</span>
<span class="name">value</span><span class="signature pdoc-code condensed">(<span class="param"><span class="bp">self</span></span><span class="return-annotation">):</span></span>
<label class="view-source-button" for="Message.value-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#Message.value"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="Message.value-177"><a href="#Message.value-177"><span class="linenos">177</span></a> <span class="k">def</span> <span class="nf">value</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
</span><span id="Message.value-178"><a href="#Message.value-178"><span class="linenos">178</span></a> <span class="sd">&quot;&quot;&quot;</span>
</span><span id="Message.value-179"><a href="#Message.value-179"><span class="linenos">179</span></a><span class="sd"> Returns object with the de-serialized version of the message content</span>
</span><span id="Message.value-180"><a href="#Message.value-180"><span class="linenos">180</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="Message.value-181"><a href="#Message.value-181"><span class="linenos">181</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_schema</span><span class="o">.</span><span class="n">decode</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_message</span><span class="o">.</span><span class="n">data</span><span class="p">())</span>
</span></pre></div>
<div class="docstring"><p>Returns object with the de-serialized version of the message content</p>
</div>
</div>
<div id="Message.properties" class="classattr">
<input id="Message.properties-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<div class="attr function">
<span class="def">def</span>
<span class="name">properties</span><span class="signature pdoc-code condensed">(<span class="param"><span class="bp">self</span></span><span class="return-annotation">):</span></span>
<label class="view-source-button" for="Message.properties-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#Message.properties"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="Message.properties-183"><a href="#Message.properties-183"><span class="linenos">183</span></a> <span class="k">def</span> <span class="nf">properties</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
</span><span id="Message.properties-184"><a href="#Message.properties-184"><span class="linenos">184</span></a> <span class="sd">&quot;&quot;&quot;</span>
</span><span id="Message.properties-185"><a href="#Message.properties-185"><span class="linenos">185</span></a><span class="sd"> Return the properties attached to the message. Properties are</span>
</span><span id="Message.properties-186"><a href="#Message.properties-186"><span class="linenos">186</span></a><span class="sd"> application-defined key/value pairs that will be attached to the</span>
</span><span id="Message.properties-187"><a href="#Message.properties-187"><span class="linenos">187</span></a><span class="sd"> message.</span>
</span><span id="Message.properties-188"><a href="#Message.properties-188"><span class="linenos">188</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="Message.properties-189"><a href="#Message.properties-189"><span class="linenos">189</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_message</span><span class="o">.</span><span class="n">properties</span><span class="p">()</span>
</span></pre></div>
<div class="docstring"><p>Return the properties attached to the message. Properties are
application-defined key/value pairs that will be attached to the
message.</p>
</div>
</div>
<div id="Message.partition_key" class="classattr">
<input id="Message.partition_key-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<div class="attr function">
<span class="def">def</span>
<span class="name">partition_key</span><span class="signature pdoc-code condensed">(<span class="param"><span class="bp">self</span></span><span class="return-annotation">):</span></span>
<label class="view-source-button" for="Message.partition_key-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#Message.partition_key"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="Message.partition_key-191"><a href="#Message.partition_key-191"><span class="linenos">191</span></a> <span class="k">def</span> <span class="nf">partition_key</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
</span><span id="Message.partition_key-192"><a href="#Message.partition_key-192"><span class="linenos">192</span></a> <span class="sd">&quot;&quot;&quot;</span>
</span><span id="Message.partition_key-193"><a href="#Message.partition_key-193"><span class="linenos">193</span></a><span class="sd"> Get the partitioning key for the message.</span>
</span><span id="Message.partition_key-194"><a href="#Message.partition_key-194"><span class="linenos">194</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="Message.partition_key-195"><a href="#Message.partition_key-195"><span class="linenos">195</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_message</span><span class="o">.</span><span class="n">partition_key</span><span class="p">()</span>
</span></pre></div>
<div class="docstring"><p>Get the partitioning key for the message.</p>
</div>
</div>
<div id="Message.publish_timestamp" class="classattr">
<input id="Message.publish_timestamp-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<div class="attr function">
<span class="def">def</span>
<span class="name">publish_timestamp</span><span class="signature pdoc-code condensed">(<span class="param"><span class="bp">self</span></span><span class="return-annotation">):</span></span>
<label class="view-source-button" for="Message.publish_timestamp-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#Message.publish_timestamp"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="Message.publish_timestamp-197"><a href="#Message.publish_timestamp-197"><span class="linenos">197</span></a> <span class="k">def</span> <span class="nf">publish_timestamp</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
</span><span id="Message.publish_timestamp-198"><a href="#Message.publish_timestamp-198"><span class="linenos">198</span></a> <span class="sd">&quot;&quot;&quot;</span>
</span><span id="Message.publish_timestamp-199"><a href="#Message.publish_timestamp-199"><span class="linenos">199</span></a><span class="sd"> Get the timestamp in milliseconds with the message publish time.</span>
</span><span id="Message.publish_timestamp-200"><a href="#Message.publish_timestamp-200"><span class="linenos">200</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="Message.publish_timestamp-201"><a href="#Message.publish_timestamp-201"><span class="linenos">201</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_message</span><span class="o">.</span><span class="n">publish_timestamp</span><span class="p">()</span>
</span></pre></div>
<div class="docstring"><p>Get the timestamp in milliseconds with the message publish time.</p>
</div>
</div>
<div id="Message.event_timestamp" class="classattr">
<input id="Message.event_timestamp-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<div class="attr function">
<span class="def">def</span>
<span class="name">event_timestamp</span><span class="signature pdoc-code condensed">(<span class="param"><span class="bp">self</span></span><span class="return-annotation">):</span></span>
<label class="view-source-button" for="Message.event_timestamp-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#Message.event_timestamp"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="Message.event_timestamp-203"><a href="#Message.event_timestamp-203"><span class="linenos">203</span></a> <span class="k">def</span> <span class="nf">event_timestamp</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
</span><span id="Message.event_timestamp-204"><a href="#Message.event_timestamp-204"><span class="linenos">204</span></a> <span class="sd">&quot;&quot;&quot;</span>
</span><span id="Message.event_timestamp-205"><a href="#Message.event_timestamp-205"><span class="linenos">205</span></a><span class="sd"> Get the timestamp in milliseconds with the message event time.</span>
</span><span id="Message.event_timestamp-206"><a href="#Message.event_timestamp-206"><span class="linenos">206</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="Message.event_timestamp-207"><a href="#Message.event_timestamp-207"><span class="linenos">207</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_message</span><span class="o">.</span><span class="n">event_timestamp</span><span class="p">()</span>
</span></pre></div>
<div class="docstring"><p>Get the timestamp in milliseconds with the message event time.</p>
</div>
</div>
<div id="Message.message_id" class="classattr">
<input id="Message.message_id-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<div class="attr function">
<span class="def">def</span>
<span class="name">message_id</span><span class="signature pdoc-code condensed">(<span class="param"><span class="bp">self</span></span><span class="return-annotation">):</span></span>
<label class="view-source-button" for="Message.message_id-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#Message.message_id"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="Message.message_id-209"><a href="#Message.message_id-209"><span class="linenos">209</span></a> <span class="k">def</span> <span class="nf">message_id</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
</span><span id="Message.message_id-210"><a href="#Message.message_id-210"><span class="linenos">210</span></a> <span class="sd">&quot;&quot;&quot;</span>
</span><span id="Message.message_id-211"><a href="#Message.message_id-211"><span class="linenos">211</span></a><span class="sd"> The message ID that can be used to refere to this particular message.</span>
</span><span id="Message.message_id-212"><a href="#Message.message_id-212"><span class="linenos">212</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="Message.message_id-213"><a href="#Message.message_id-213"><span class="linenos">213</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_message</span><span class="o">.</span><span class="n">message_id</span><span class="p">()</span>
</span></pre></div>
<div class="docstring"><p>The message ID that can be used to refere to this particular message.</p>
</div>
</div>
<div id="Message.topic_name" class="classattr">
<input id="Message.topic_name-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<div class="attr function">
<span class="def">def</span>
<span class="name">topic_name</span><span class="signature pdoc-code condensed">(<span class="param"><span class="bp">self</span></span><span class="return-annotation">):</span></span>
<label class="view-source-button" for="Message.topic_name-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#Message.topic_name"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="Message.topic_name-215"><a href="#Message.topic_name-215"><span class="linenos">215</span></a> <span class="k">def</span> <span class="nf">topic_name</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
</span><span id="Message.topic_name-216"><a href="#Message.topic_name-216"><span class="linenos">216</span></a> <span class="sd">&quot;&quot;&quot;</span>
</span><span id="Message.topic_name-217"><a href="#Message.topic_name-217"><span class="linenos">217</span></a><span class="sd"> Get the topic Name from which this message originated from</span>
</span><span id="Message.topic_name-218"><a href="#Message.topic_name-218"><span class="linenos">218</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="Message.topic_name-219"><a href="#Message.topic_name-219"><span class="linenos">219</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_message</span><span class="o">.</span><span class="n">topic_name</span><span class="p">()</span>
</span></pre></div>
<div class="docstring"><p>Get the topic Name from which this message originated from</p>
</div>
</div>
<div id="Message.redelivery_count" class="classattr">
<input id="Message.redelivery_count-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<div class="attr function">
<span class="def">def</span>
<span class="name">redelivery_count</span><span class="signature pdoc-code condensed">(<span class="param"><span class="bp">self</span></span><span class="return-annotation">):</span></span>
<label class="view-source-button" for="Message.redelivery_count-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#Message.redelivery_count"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="Message.redelivery_count-221"><a href="#Message.redelivery_count-221"><span class="linenos">221</span></a> <span class="k">def</span> <span class="nf">redelivery_count</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
</span><span id="Message.redelivery_count-222"><a href="#Message.redelivery_count-222"><span class="linenos">222</span></a> <span class="sd">&quot;&quot;&quot;</span>
</span><span id="Message.redelivery_count-223"><a href="#Message.redelivery_count-223"><span class="linenos">223</span></a><span class="sd"> Get the redelivery count for this message</span>
</span><span id="Message.redelivery_count-224"><a href="#Message.redelivery_count-224"><span class="linenos">224</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="Message.redelivery_count-225"><a href="#Message.redelivery_count-225"><span class="linenos">225</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_message</span><span class="o">.</span><span class="n">redelivery_count</span><span class="p">()</span>
</span></pre></div>
<div class="docstring"><p>Get the redelivery count for this message</p>
</div>
</div>
<div id="Message.schema_version" class="classattr">
<input id="Message.schema_version-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<div class="attr function">
<span class="def">def</span>
<span class="name">schema_version</span><span class="signature pdoc-code condensed">(<span class="param"><span class="bp">self</span></span><span class="return-annotation">):</span></span>
<label class="view-source-button" for="Message.schema_version-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#Message.schema_version"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="Message.schema_version-227"><a href="#Message.schema_version-227"><span class="linenos">227</span></a> <span class="k">def</span> <span class="nf">schema_version</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
</span><span id="Message.schema_version-228"><a href="#Message.schema_version-228"><span class="linenos">228</span></a> <span class="sd">&quot;&quot;&quot;</span>
</span><span id="Message.schema_version-229"><a href="#Message.schema_version-229"><span class="linenos">229</span></a><span class="sd"> Get the schema version for this message</span>
</span><span id="Message.schema_version-230"><a href="#Message.schema_version-230"><span class="linenos">230</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="Message.schema_version-231"><a href="#Message.schema_version-231"><span class="linenos">231</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_message</span><span class="o">.</span><span class="n">schema_version</span><span class="p">()</span>
</span></pre></div>
<div class="docstring"><p>Get the schema version for this message</p>
</div>
</div>
</section>
<section id="MessageBatch">
<input id="MessageBatch-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<div class="attr class">
<span class="def">class</span>
<span class="name">MessageBatch</span>:
<label class="view-source-button" for="MessageBatch-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#MessageBatch"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="MessageBatch-240"><a href="#MessageBatch-240"><span class="linenos">240</span></a><span class="k">class</span> <span class="nc">MessageBatch</span><span class="p">:</span>
</span><span id="MessageBatch-241"><a href="#MessageBatch-241"><span class="linenos">241</span></a>
</span><span id="MessageBatch-242"><a href="#MessageBatch-242"><span class="linenos">242</span></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
</span><span id="MessageBatch-243"><a href="#MessageBatch-243"><span class="linenos">243</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_msg_batch</span> <span class="o">=</span> <span class="n">_pulsar</span><span class="o">.</span><span class="n">MessageBatch</span><span class="p">()</span>
</span><span id="MessageBatch-244"><a href="#MessageBatch-244"><span class="linenos">244</span></a>
</span><span id="MessageBatch-245"><a href="#MessageBatch-245"><span class="linenos">245</span></a> <span class="k">def</span> <span class="nf">with_message_id</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">msg_id</span><span class="p">):</span>
</span><span id="MessageBatch-246"><a href="#MessageBatch-246"><span class="linenos">246</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">msg_id</span><span class="p">,</span> <span class="n">_pulsar</span><span class="o">.</span><span class="n">MessageId</span><span class="p">):</span>
</span><span id="MessageBatch-247"><a href="#MessageBatch-247"><span class="linenos">247</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">msg_id</span><span class="p">,</span> <span class="n">MessageId</span><span class="p">):</span>
</span><span id="MessageBatch-248"><a href="#MessageBatch-248"><span class="linenos">248</span></a> <span class="n">msg_id</span> <span class="o">=</span> <span class="n">msg_id</span><span class="o">.</span><span class="n">_msg_id</span>
</span><span id="MessageBatch-249"><a href="#MessageBatch-249"><span class="linenos">249</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="MessageBatch-250"><a href="#MessageBatch-250"><span class="linenos">250</span></a> <span class="k">raise</span> <span class="ne">TypeError</span><span class="p">(</span><span class="s2">&quot;unknown message id type&quot;</span><span class="p">)</span>
</span><span id="MessageBatch-251"><a href="#MessageBatch-251"><span class="linenos">251</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_msg_batch</span><span class="o">.</span><span class="n">with_message_id</span><span class="p">(</span><span class="n">msg_id</span><span class="p">)</span>
</span><span id="MessageBatch-252"><a href="#MessageBatch-252"><span class="linenos">252</span></a> <span class="k">return</span> <span class="bp">self</span>
</span><span id="MessageBatch-253"><a href="#MessageBatch-253"><span class="linenos">253</span></a>
</span><span id="MessageBatch-254"><a href="#MessageBatch-254"><span class="linenos">254</span></a> <span class="k">def</span> <span class="nf">parse_from</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">data</span><span class="p">,</span> <span class="n">size</span><span class="p">):</span>
</span><span id="MessageBatch-255"><a href="#MessageBatch-255"><span class="linenos">255</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_msg_batch</span><span class="o">.</span><span class="n">parse_from</span><span class="p">(</span><span class="n">data</span><span class="p">,</span> <span class="n">size</span><span class="p">)</span>
</span><span id="MessageBatch-256"><a href="#MessageBatch-256"><span class="linenos">256</span></a> <span class="n">_msgs</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_msg_batch</span><span class="o">.</span><span class="n">messages</span><span class="p">()</span>
</span><span id="MessageBatch-257"><a href="#MessageBatch-257"><span class="linenos">257</span></a> <span class="k">return</span> <span class="nb">list</span><span class="p">(</span><span class="nb">map</span><span class="p">(</span><span class="n">Message</span><span class="o">.</span><span class="n">_wrap</span><span class="p">,</span> <span class="n">_msgs</span><span class="p">))</span>
</span></pre></div>
<div id="MessageBatch.__init__" class="classattr">
<input id="MessageBatch.__init__-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<div class="attr function">
<span class="name">MessageBatch</span><span class="signature pdoc-code condensed">()</span>
<label class="view-source-button" for="MessageBatch.__init__-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#MessageBatch.__init__"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="MessageBatch.__init__-242"><a href="#MessageBatch.__init__-242"><span class="linenos">242</span></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
</span><span id="MessageBatch.__init__-243"><a href="#MessageBatch.__init__-243"><span class="linenos">243</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_msg_batch</span> <span class="o">=</span> <span class="n">_pulsar</span><span class="o">.</span><span class="n">MessageBatch</span><span class="p">()</span>
</span></pre></div>
</div>
<div id="MessageBatch.with_message_id" class="classattr">
<input id="MessageBatch.with_message_id-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<div class="attr function">
<span class="def">def</span>
<span class="name">with_message_id</span><span class="signature pdoc-code condensed">(<span class="param"><span class="bp">self</span>, </span><span class="param"><span class="n">msg_id</span></span><span class="return-annotation">):</span></span>
<label class="view-source-button" for="MessageBatch.with_message_id-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#MessageBatch.with_message_id"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="MessageBatch.with_message_id-245"><a href="#MessageBatch.with_message_id-245"><span class="linenos">245</span></a> <span class="k">def</span> <span class="nf">with_message_id</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">msg_id</span><span class="p">):</span>
</span><span id="MessageBatch.with_message_id-246"><a href="#MessageBatch.with_message_id-246"><span class="linenos">246</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">msg_id</span><span class="p">,</span> <span class="n">_pulsar</span><span class="o">.</span><span class="n">MessageId</span><span class="p">):</span>
</span><span id="MessageBatch.with_message_id-247"><a href="#MessageBatch.with_message_id-247"><span class="linenos">247</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">msg_id</span><span class="p">,</span> <span class="n">MessageId</span><span class="p">):</span>
</span><span id="MessageBatch.with_message_id-248"><a href="#MessageBatch.with_message_id-248"><span class="linenos">248</span></a> <span class="n">msg_id</span> <span class="o">=</span> <span class="n">msg_id</span><span class="o">.</span><span class="n">_msg_id</span>
</span><span id="MessageBatch.with_message_id-249"><a href="#MessageBatch.with_message_id-249"><span class="linenos">249</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="MessageBatch.with_message_id-250"><a href="#MessageBatch.with_message_id-250"><span class="linenos">250</span></a> <span class="k">raise</span> <span class="ne">TypeError</span><span class="p">(</span><span class="s2">&quot;unknown message id type&quot;</span><span class="p">)</span>
</span><span id="MessageBatch.with_message_id-251"><a href="#MessageBatch.with_message_id-251"><span class="linenos">251</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_msg_batch</span><span class="o">.</span><span class="n">with_message_id</span><span class="p">(</span><span class="n">msg_id</span><span class="p">)</span>
</span><span id="MessageBatch.with_message_id-252"><a href="#MessageBatch.with_message_id-252"><span class="linenos">252</span></a> <span class="k">return</span> <span class="bp">self</span>
</span></pre></div>
</div>
<div id="MessageBatch.parse_from" class="classattr">
<input id="MessageBatch.parse_from-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<div class="attr function">
<span class="def">def</span>
<span class="name">parse_from</span><span class="signature pdoc-code condensed">(<span class="param"><span class="bp">self</span>, </span><span class="param"><span class="n">data</span>, </span><span class="param"><span class="n">size</span></span><span class="return-annotation">):</span></span>
<label class="view-source-button" for="MessageBatch.parse_from-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#MessageBatch.parse_from"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="MessageBatch.parse_from-254"><a href="#MessageBatch.parse_from-254"><span class="linenos">254</span></a> <span class="k">def</span> <span class="nf">parse_from</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">data</span><span class="p">,</span> <span class="n">size</span><span class="p">):</span>
</span><span id="MessageBatch.parse_from-255"><a href="#MessageBatch.parse_from-255"><span class="linenos">255</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_msg_batch</span><span class="o">.</span><span class="n">parse_from</span><span class="p">(</span><span class="n">data</span><span class="p">,</span> <span class="n">size</span><span class="p">)</span>
</span><span id="MessageBatch.parse_from-256"><a href="#MessageBatch.parse_from-256"><span class="linenos">256</span></a> <span class="n">_msgs</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_msg_batch</span><span class="o">.</span><span class="n">messages</span><span class="p">()</span>
</span><span id="MessageBatch.parse_from-257"><a href="#MessageBatch.parse_from-257"><span class="linenos">257</span></a> <span class="k">return</span> <span class="nb">list</span><span class="p">(</span><span class="nb">map</span><span class="p">(</span><span class="n">Message</span><span class="o">.</span><span class="n">_wrap</span><span class="p">,</span> <span class="n">_msgs</span><span class="p">))</span>
</span></pre></div>
</div>
</section>
<section id="Authentication">
<input id="Authentication-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<div class="attr class">
<span class="def">class</span>
<span class="name">Authentication</span>:
<label class="view-source-button" for="Authentication-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#Authentication"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="Authentication-260"><a href="#Authentication-260"><span class="linenos">260</span></a><span class="k">class</span> <span class="nc">Authentication</span><span class="p">:</span>
</span><span id="Authentication-261"><a href="#Authentication-261"><span class="linenos">261</span></a> <span class="sd">&quot;&quot;&quot;</span>
</span><span id="Authentication-262"><a href="#Authentication-262"><span class="linenos">262</span></a><span class="sd"> Authentication provider object. Used to load authentication from an external</span>
</span><span id="Authentication-263"><a href="#Authentication-263"><span class="linenos">263</span></a><span class="sd"> shared library.</span>
</span><span id="Authentication-264"><a href="#Authentication-264"><span class="linenos">264</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="Authentication-265"><a href="#Authentication-265"><span class="linenos">265</span></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">dynamicLibPath</span><span class="p">,</span> <span class="n">authParamsString</span><span class="p">):</span>
</span><span id="Authentication-266"><a href="#Authentication-266"><span class="linenos">266</span></a> <span class="sd">&quot;&quot;&quot;</span>
</span><span id="Authentication-267"><a href="#Authentication-267"><span class="linenos">267</span></a><span class="sd"> Create the authentication provider instance.</span>
</span><span id="Authentication-268"><a href="#Authentication-268"><span class="linenos">268</span></a>
</span><span id="Authentication-269"><a href="#Authentication-269"><span class="linenos">269</span></a><span class="sd"> **Args**</span>
</span><span id="Authentication-270"><a href="#Authentication-270"><span class="linenos">270</span></a>
</span><span id="Authentication-271"><a href="#Authentication-271"><span class="linenos">271</span></a><span class="sd"> * `dynamicLibPath`: Path to the authentication provider shared library</span>
</span><span id="Authentication-272"><a href="#Authentication-272"><span class="linenos">272</span></a><span class="sd"> (such as `tls.so`)</span>
</span><span id="Authentication-273"><a href="#Authentication-273"><span class="linenos">273</span></a><span class="sd"> * `authParamsString`: Comma-separated list of provider-specific</span>
</span><span id="Authentication-274"><a href="#Authentication-274"><span class="linenos">274</span></a><span class="sd"> configuration params</span>
</span><span id="Authentication-275"><a href="#Authentication-275"><span class="linenos">275</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="Authentication-276"><a href="#Authentication-276"><span class="linenos">276</span></a> <span class="n">_check_type</span><span class="p">(</span><span class="nb">str</span><span class="p">,</span> <span class="n">dynamicLibPath</span><span class="p">,</span> <span class="s1">&#39;dynamicLibPath&#39;</span><span class="p">)</span>
</span><span id="Authentication-277"><a href="#Authentication-277"><span class="linenos">277</span></a> <span class="n">_check_type</span><span class="p">(</span><span class="nb">str</span><span class="p">,</span> <span class="n">authParamsString</span><span class="p">,</span> <span class="s1">&#39;authParamsString&#39;</span><span class="p">)</span>
</span><span id="Authentication-278"><a href="#Authentication-278"><span class="linenos">278</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">auth</span> <span class="o">=</span> <span class="n">_pulsar</span><span class="o">.</span><span class="n">Authentication</span><span class="p">(</span><span class="n">dynamicLibPath</span><span class="p">,</span> <span class="n">authParamsString</span><span class="p">)</span>
</span></pre></div>
<div class="docstring"><p>Authentication provider object. Used to load authentication from an external
shared library.</p>
</div>
<div id="Authentication.__init__" class="classattr">
<input id="Authentication.__init__-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<div class="attr function">
<span class="name">Authentication</span><span class="signature pdoc-code condensed">(<span class="param"><span class="n">dynamicLibPath</span>, </span><span class="param"><span class="n">authParamsString</span></span>)</span>
<label class="view-source-button" for="Authentication.__init__-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#Authentication.__init__"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="Authentication.__init__-265"><a href="#Authentication.__init__-265"><span class="linenos">265</span></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">dynamicLibPath</span><span class="p">,</span> <span class="n">authParamsString</span><span class="p">):</span>
</span><span id="Authentication.__init__-266"><a href="#Authentication.__init__-266"><span class="linenos">266</span></a> <span class="sd">&quot;&quot;&quot;</span>
</span><span id="Authentication.__init__-267"><a href="#Authentication.__init__-267"><span class="linenos">267</span></a><span class="sd"> Create the authentication provider instance.</span>
</span><span id="Authentication.__init__-268"><a href="#Authentication.__init__-268"><span class="linenos">268</span></a>
</span><span id="Authentication.__init__-269"><a href="#Authentication.__init__-269"><span class="linenos">269</span></a><span class="sd"> **Args**</span>
</span><span id="Authentication.__init__-270"><a href="#Authentication.__init__-270"><span class="linenos">270</span></a>
</span><span id="Authentication.__init__-271"><a href="#Authentication.__init__-271"><span class="linenos">271</span></a><span class="sd"> * `dynamicLibPath`: Path to the authentication provider shared library</span>
</span><span id="Authentication.__init__-272"><a href="#Authentication.__init__-272"><span class="linenos">272</span></a><span class="sd"> (such as `tls.so`)</span>
</span><span id="Authentication.__init__-273"><a href="#Authentication.__init__-273"><span class="linenos">273</span></a><span class="sd"> * `authParamsString`: Comma-separated list of provider-specific</span>
</span><span id="Authentication.__init__-274"><a href="#Authentication.__init__-274"><span class="linenos">274</span></a><span class="sd"> configuration params</span>
</span><span id="Authentication.__init__-275"><a href="#Authentication.__init__-275"><span class="linenos">275</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="Authentication.__init__-276"><a href="#Authentication.__init__-276"><span class="linenos">276</span></a> <span class="n">_check_type</span><span class="p">(</span><span class="nb">str</span><span class="p">,</span> <span class="n">dynamicLibPath</span><span class="p">,</span> <span class="s1">&#39;dynamicLibPath&#39;</span><span class="p">)</span>
</span><span id="Authentication.__init__-277"><a href="#Authentication.__init__-277"><span class="linenos">277</span></a> <span class="n">_check_type</span><span class="p">(</span><span class="nb">str</span><span class="p">,</span> <span class="n">authParamsString</span><span class="p">,</span> <span class="s1">&#39;authParamsString&#39;</span><span class="p">)</span>
</span><span id="Authentication.__init__-278"><a href="#Authentication.__init__-278"><span class="linenos">278</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">auth</span> <span class="o">=</span> <span class="n">_pulsar</span><span class="o">.</span><span class="n">Authentication</span><span class="p">(</span><span class="n">dynamicLibPath</span><span class="p">,</span> <span class="n">authParamsString</span><span class="p">)</span>
</span></pre></div>
<div class="docstring"><p>Create the authentication provider instance.</p>
<p><strong>Args</strong></p>
<ul>
<li><code>dynamicLibPath</code>: Path to the authentication provider shared library
(such as <code>tls.so</code>)</li>
<li><code>authParamsString</code>: Comma-separated list of provider-specific
configuration params</li>
</ul>
</div>
</div>
</section>
<section id="AuthenticationTLS">
<input id="AuthenticationTLS-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<div class="attr class">
<span class="def">class</span>
<span class="name">AuthenticationTLS</span><wbr>(<span class="base"><a href="#Authentication">Authentication</a></span>):
<label class="view-source-button" for="AuthenticationTLS-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#AuthenticationTLS"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="AuthenticationTLS-281"><a href="#AuthenticationTLS-281"><span class="linenos">281</span></a><span class="k">class</span> <span class="nc">AuthenticationTLS</span><span class="p">(</span><span class="n">Authentication</span><span class="p">):</span>
</span><span id="AuthenticationTLS-282"><a href="#AuthenticationTLS-282"><span class="linenos">282</span></a> <span class="sd">&quot;&quot;&quot;</span>
</span><span id="AuthenticationTLS-283"><a href="#AuthenticationTLS-283"><span class="linenos">283</span></a><span class="sd"> TLS Authentication implementation</span>
</span><span id="AuthenticationTLS-284"><a href="#AuthenticationTLS-284"><span class="linenos">284</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="AuthenticationTLS-285"><a href="#AuthenticationTLS-285"><span class="linenos">285</span></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">certificate_path</span><span class="p">,</span> <span class="n">private_key_path</span><span class="p">):</span>
</span><span id="AuthenticationTLS-286"><a href="#AuthenticationTLS-286"><span class="linenos">286</span></a> <span class="sd">&quot;&quot;&quot;</span>
</span><span id="AuthenticationTLS-287"><a href="#AuthenticationTLS-287"><span class="linenos">287</span></a><span class="sd"> Create the TLS authentication provider instance.</span>
</span><span id="AuthenticationTLS-288"><a href="#AuthenticationTLS-288"><span class="linenos">288</span></a>
</span><span id="AuthenticationTLS-289"><a href="#AuthenticationTLS-289"><span class="linenos">289</span></a><span class="sd"> **Args**</span>
</span><span id="AuthenticationTLS-290"><a href="#AuthenticationTLS-290"><span class="linenos">290</span></a>
</span><span id="AuthenticationTLS-291"><a href="#AuthenticationTLS-291"><span class="linenos">291</span></a><span class="sd"> * `certificatePath`: Path to the public certificate</span>
</span><span id="AuthenticationTLS-292"><a href="#AuthenticationTLS-292"><span class="linenos">292</span></a><span class="sd"> * `privateKeyPath`: Path to private TLS key</span>
</span><span id="AuthenticationTLS-293"><a href="#AuthenticationTLS-293"><span class="linenos">293</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="AuthenticationTLS-294"><a href="#AuthenticationTLS-294"><span class="linenos">294</span></a> <span class="n">_check_type</span><span class="p">(</span><span class="nb">str</span><span class="p">,</span> <span class="n">certificate_path</span><span class="p">,</span> <span class="s1">&#39;certificate_path&#39;</span><span class="p">)</span>
</span><span id="AuthenticationTLS-295"><a href="#AuthenticationTLS-295"><span class="linenos">295</span></a> <span class="n">_check_type</span><span class="p">(</span><span class="nb">str</span><span class="p">,</span> <span class="n">private_key_path</span><span class="p">,</span> <span class="s1">&#39;private_key_path&#39;</span><span class="p">)</span>
</span><span id="AuthenticationTLS-296"><a href="#AuthenticationTLS-296"><span class="linenos">296</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">auth</span> <span class="o">=</span> <span class="n">_pulsar</span><span class="o">.</span><span class="n">AuthenticationTLS</span><span class="p">(</span><span class="n">certificate_path</span><span class="p">,</span> <span class="n">private_key_path</span><span class="p">)</span>
</span></pre></div>
<div class="docstring"><p>TLS Authentication implementation</p>
</div>
<div id="AuthenticationTLS.__init__" class="classattr">
<input id="AuthenticationTLS.__init__-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<div class="attr function">
<span class="name">AuthenticationTLS</span><span class="signature pdoc-code condensed">(<span class="param"><span class="n">certificate_path</span>, </span><span class="param"><span class="n">private_key_path</span></span>)</span>
<label class="view-source-button" for="AuthenticationTLS.__init__-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#AuthenticationTLS.__init__"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="AuthenticationTLS.__init__-285"><a href="#AuthenticationTLS.__init__-285"><span class="linenos">285</span></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">certificate_path</span><span class="p">,</span> <span class="n">private_key_path</span><span class="p">):</span>
</span><span id="AuthenticationTLS.__init__-286"><a href="#AuthenticationTLS.__init__-286"><span class="linenos">286</span></a> <span class="sd">&quot;&quot;&quot;</span>
</span><span id="AuthenticationTLS.__init__-287"><a href="#AuthenticationTLS.__init__-287"><span class="linenos">287</span></a><span class="sd"> Create the TLS authentication provider instance.</span>
</span><span id="AuthenticationTLS.__init__-288"><a href="#AuthenticationTLS.__init__-288"><span class="linenos">288</span></a>
</span><span id="AuthenticationTLS.__init__-289"><a href="#AuthenticationTLS.__init__-289"><span class="linenos">289</span></a><span class="sd"> **Args**</span>
</span><span id="AuthenticationTLS.__init__-290"><a href="#AuthenticationTLS.__init__-290"><span class="linenos">290</span></a>
</span><span id="AuthenticationTLS.__init__-291"><a href="#AuthenticationTLS.__init__-291"><span class="linenos">291</span></a><span class="sd"> * `certificatePath`: Path to the public certificate</span>
</span><span id="AuthenticationTLS.__init__-292"><a href="#AuthenticationTLS.__init__-292"><span class="linenos">292</span></a><span class="sd"> * `privateKeyPath`: Path to private TLS key</span>
</span><span id="AuthenticationTLS.__init__-293"><a href="#AuthenticationTLS.__init__-293"><span class="linenos">293</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="AuthenticationTLS.__init__-294"><a href="#AuthenticationTLS.__init__-294"><span class="linenos">294</span></a> <span class="n">_check_type</span><span class="p">(</span><span class="nb">str</span><span class="p">,</span> <span class="n">certificate_path</span><span class="p">,</span> <span class="s1">&#39;certificate_path&#39;</span><span class="p">)</span>
</span><span id="AuthenticationTLS.__init__-295"><a href="#AuthenticationTLS.__init__-295"><span class="linenos">295</span></a> <span class="n">_check_type</span><span class="p">(</span><span class="nb">str</span><span class="p">,</span> <span class="n">private_key_path</span><span class="p">,</span> <span class="s1">&#39;private_key_path&#39;</span><span class="p">)</span>
</span><span id="AuthenticationTLS.__init__-296"><a href="#AuthenticationTLS.__init__-296"><span class="linenos">296</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">auth</span> <span class="o">=</span> <span class="n">_pulsar</span><span class="o">.</span><span class="n">AuthenticationTLS</span><span class="p">(</span><span class="n">certificate_path</span><span class="p">,</span> <span class="n">private_key_path</span><span class="p">)</span>
</span></pre></div>
<div class="docstring"><p>Create the TLS authentication provider instance.</p>
<p><strong>Args</strong></p>
<ul>
<li><code>certificatePath</code>: Path to the public certificate</li>
<li><code>privateKeyPath</code>: Path to private TLS key</li>
</ul>
</div>
</div>
</section>
<section id="AuthenticationToken">
<input id="AuthenticationToken-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<div class="attr class">
<span class="def">class</span>
<span class="name">AuthenticationToken</span><wbr>(<span class="base"><a href="#Authentication">Authentication</a></span>):
<label class="view-source-button" for="AuthenticationToken-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#AuthenticationToken"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="AuthenticationToken-299"><a href="#AuthenticationToken-299"><span class="linenos">299</span></a><span class="k">class</span> <span class="nc">AuthenticationToken</span><span class="p">(</span><span class="n">Authentication</span><span class="p">):</span>
</span><span id="AuthenticationToken-300"><a href="#AuthenticationToken-300"><span class="linenos">300</span></a> <span class="sd">&quot;&quot;&quot;</span>
</span><span id="AuthenticationToken-301"><a href="#AuthenticationToken-301"><span class="linenos">301</span></a><span class="sd"> Token based authentication implementation</span>
</span><span id="AuthenticationToken-302"><a href="#AuthenticationToken-302"><span class="linenos">302</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="AuthenticationToken-303"><a href="#AuthenticationToken-303"><span class="linenos">303</span></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">token</span><span class="p">):</span>
</span><span id="AuthenticationToken-304"><a href="#AuthenticationToken-304"><span class="linenos">304</span></a> <span class="sd">&quot;&quot;&quot;</span>
</span><span id="AuthenticationToken-305"><a href="#AuthenticationToken-305"><span class="linenos">305</span></a><span class="sd"> Create the token authentication provider instance.</span>
</span><span id="AuthenticationToken-306"><a href="#AuthenticationToken-306"><span class="linenos">306</span></a>
</span><span id="AuthenticationToken-307"><a href="#AuthenticationToken-307"><span class="linenos">307</span></a><span class="sd"> **Args**</span>
</span><span id="AuthenticationToken-308"><a href="#AuthenticationToken-308"><span class="linenos">308</span></a>
</span><span id="AuthenticationToken-309"><a href="#AuthenticationToken-309"><span class="linenos">309</span></a><span class="sd"> * `token`: A string containing the token or a functions that provides a</span>
</span><span id="AuthenticationToken-310"><a href="#AuthenticationToken-310"><span class="linenos">310</span></a><span class="sd"> string with the token</span>
</span><span id="AuthenticationToken-311"><a href="#AuthenticationToken-311"><span class="linenos">311</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="AuthenticationToken-312"><a href="#AuthenticationToken-312"><span class="linenos">312</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="p">(</span><span class="nb">isinstance</span><span class="p">(</span><span class="n">token</span><span class="p">,</span> <span class="nb">str</span><span class="p">)</span> <span class="ow">or</span> <span class="n">callable</span><span class="p">(</span><span class="n">token</span><span class="p">)):</span>
</span><span id="AuthenticationToken-313"><a href="#AuthenticationToken-313"><span class="linenos">313</span></a> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">&quot;Argument token is expected to be of type &#39;str&#39; or a function returning &#39;str&#39;&quot;</span><span class="p">)</span>
</span><span id="AuthenticationToken-314"><a href="#AuthenticationToken-314"><span class="linenos">314</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">auth</span> <span class="o">=</span> <span class="n">_pulsar</span><span class="o">.</span><span class="n">AuthenticationToken</span><span class="p">(</span><span class="n">token</span><span class="p">)</span>
</span></pre></div>
<div class="docstring"><p>Token based authentication implementation</p>
</div>
<div id="AuthenticationToken.__init__" class="classattr">
<input id="AuthenticationToken.__init__-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<div class="attr function">
<span class="name">AuthenticationToken</span><span class="signature pdoc-code condensed">(<span class="param"><span class="n">token</span></span>)</span>
<label class="view-source-button" for="AuthenticationToken.__init__-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#AuthenticationToken.__init__"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="AuthenticationToken.__init__-303"><a href="#AuthenticationToken.__init__-303"><span class="linenos">303</span></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">token</span><span class="p">):</span>
</span><span id="AuthenticationToken.__init__-304"><a href="#AuthenticationToken.__init__-304"><span class="linenos">304</span></a> <span class="sd">&quot;&quot;&quot;</span>
</span><span id="AuthenticationToken.__init__-305"><a href="#AuthenticationToken.__init__-305"><span class="linenos">305</span></a><span class="sd"> Create the token authentication provider instance.</span>
</span><span id="AuthenticationToken.__init__-306"><a href="#AuthenticationToken.__init__-306"><span class="linenos">306</span></a>
</span><span id="AuthenticationToken.__init__-307"><a href="#AuthenticationToken.__init__-307"><span class="linenos">307</span></a><span class="sd"> **Args**</span>
</span><span id="AuthenticationToken.__init__-308"><a href="#AuthenticationToken.__init__-308"><span class="linenos">308</span></a>
</span><span id="AuthenticationToken.__init__-309"><a href="#AuthenticationToken.__init__-309"><span class="linenos">309</span></a><span class="sd"> * `token`: A string containing the token or a functions that provides a</span>
</span><span id="AuthenticationToken.__init__-310"><a href="#AuthenticationToken.__init__-310"><span class="linenos">310</span></a><span class="sd"> string with the token</span>
</span><span id="AuthenticationToken.__init__-311"><a href="#AuthenticationToken.__init__-311"><span class="linenos">311</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="AuthenticationToken.__init__-312"><a href="#AuthenticationToken.__init__-312"><span class="linenos">312</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="p">(</span><span class="nb">isinstance</span><span class="p">(</span><span class="n">token</span><span class="p">,</span> <span class="nb">str</span><span class="p">)</span> <span class="ow">or</span> <span class="n">callable</span><span class="p">(</span><span class="n">token</span><span class="p">)):</span>
</span><span id="AuthenticationToken.__init__-313"><a href="#AuthenticationToken.__init__-313"><span class="linenos">313</span></a> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">&quot;Argument token is expected to be of type &#39;str&#39; or a function returning &#39;str&#39;&quot;</span><span class="p">)</span>
</span><span id="AuthenticationToken.__init__-314"><a href="#AuthenticationToken.__init__-314"><span class="linenos">314</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">auth</span> <span class="o">=</span> <span class="n">_pulsar</span><span class="o">.</span><span class="n">AuthenticationToken</span><span class="p">(</span><span class="n">token</span><span class="p">)</span>
</span></pre></div>
<div class="docstring"><p>Create the token authentication provider instance.</p>
<p><strong>Args</strong></p>
<ul>
<li><code>token</code>: A string containing the token or a functions that provides a
string with the token</li>
</ul>
</div>
</div>
</section>
<section id="AuthenticationAthenz">
<input id="AuthenticationAthenz-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<div class="attr class">
<span class="def">class</span>
<span class="name">AuthenticationAthenz</span><wbr>(<span class="base"><a href="#Authentication">Authentication</a></span>):
<label class="view-source-button" for="AuthenticationAthenz-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#AuthenticationAthenz"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="AuthenticationAthenz-317"><a href="#AuthenticationAthenz-317"><span class="linenos">317</span></a><span class="k">class</span> <span class="nc">AuthenticationAthenz</span><span class="p">(</span><span class="n">Authentication</span><span class="p">):</span>
</span><span id="AuthenticationAthenz-318"><a href="#AuthenticationAthenz-318"><span class="linenos">318</span></a> <span class="sd">&quot;&quot;&quot;</span>
</span><span id="AuthenticationAthenz-319"><a href="#AuthenticationAthenz-319"><span class="linenos">319</span></a><span class="sd"> Athenz Authentication implementation</span>
</span><span id="AuthenticationAthenz-320"><a href="#AuthenticationAthenz-320"><span class="linenos">320</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="AuthenticationAthenz-321"><a href="#AuthenticationAthenz-321"><span class="linenos">321</span></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">auth_params_string</span><span class="p">):</span>
</span><span id="AuthenticationAthenz-322"><a href="#AuthenticationAthenz-322"><span class="linenos">322</span></a> <span class="sd">&quot;&quot;&quot;</span>
</span><span id="AuthenticationAthenz-323"><a href="#AuthenticationAthenz-323"><span class="linenos">323</span></a><span class="sd"> Create the Athenz authentication provider instance.</span>
</span><span id="AuthenticationAthenz-324"><a href="#AuthenticationAthenz-324"><span class="linenos">324</span></a>
</span><span id="AuthenticationAthenz-325"><a href="#AuthenticationAthenz-325"><span class="linenos">325</span></a><span class="sd"> **Args**</span>
</span><span id="AuthenticationAthenz-326"><a href="#AuthenticationAthenz-326"><span class="linenos">326</span></a>
</span><span id="AuthenticationAthenz-327"><a href="#AuthenticationAthenz-327"><span class="linenos">327</span></a><span class="sd"> * `auth_params_string`: JSON encoded configuration for Athenz client</span>
</span><span id="AuthenticationAthenz-328"><a href="#AuthenticationAthenz-328"><span class="linenos">328</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="AuthenticationAthenz-329"><a href="#AuthenticationAthenz-329"><span class="linenos">329</span></a> <span class="n">_check_type</span><span class="p">(</span><span class="nb">str</span><span class="p">,</span> <span class="n">auth_params_string</span><span class="p">,</span> <span class="s1">&#39;auth_params_string&#39;</span><span class="p">)</span>
</span><span id="AuthenticationAthenz-330"><a href="#AuthenticationAthenz-330"><span class="linenos">330</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">auth</span> <span class="o">=</span> <span class="n">_pulsar</span><span class="o">.</span><span class="n">AuthenticationAthenz</span><span class="p">(</span><span class="n">auth_params_string</span><span class="p">)</span>
</span></pre></div>
<div class="docstring"><p>Athenz Authentication implementation</p>
</div>
<div id="AuthenticationAthenz.__init__" class="classattr">
<input id="AuthenticationAthenz.__init__-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<div class="attr function">
<span class="name">AuthenticationAthenz</span><span class="signature pdoc-code condensed">(<span class="param"><span class="n">auth_params_string</span></span>)</span>
<label class="view-source-button" for="AuthenticationAthenz.__init__-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#AuthenticationAthenz.__init__"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="AuthenticationAthenz.__init__-321"><a href="#AuthenticationAthenz.__init__-321"><span class="linenos">321</span></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">auth_params_string</span><span class="p">):</span>
</span><span id="AuthenticationAthenz.__init__-322"><a href="#AuthenticationAthenz.__init__-322"><span class="linenos">322</span></a> <span class="sd">&quot;&quot;&quot;</span>
</span><span id="AuthenticationAthenz.__init__-323"><a href="#AuthenticationAthenz.__init__-323"><span class="linenos">323</span></a><span class="sd"> Create the Athenz authentication provider instance.</span>
</span><span id="AuthenticationAthenz.__init__-324"><a href="#AuthenticationAthenz.__init__-324"><span class="linenos">324</span></a>
</span><span id="AuthenticationAthenz.__init__-325"><a href="#AuthenticationAthenz.__init__-325"><span class="linenos">325</span></a><span class="sd"> **Args**</span>
</span><span id="AuthenticationAthenz.__init__-326"><a href="#AuthenticationAthenz.__init__-326"><span class="linenos">326</span></a>
</span><span id="AuthenticationAthenz.__init__-327"><a href="#AuthenticationAthenz.__init__-327"><span class="linenos">327</span></a><span class="sd"> * `auth_params_string`: JSON encoded configuration for Athenz client</span>
</span><span id="AuthenticationAthenz.__init__-328"><a href="#AuthenticationAthenz.__init__-328"><span class="linenos">328</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="AuthenticationAthenz.__init__-329"><a href="#AuthenticationAthenz.__init__-329"><span class="linenos">329</span></a> <span class="n">_check_type</span><span class="p">(</span><span class="nb">str</span><span class="p">,</span> <span class="n">auth_params_string</span><span class="p">,</span> <span class="s1">&#39;auth_params_string&#39;</span><span class="p">)</span>
</span><span id="AuthenticationAthenz.__init__-330"><a href="#AuthenticationAthenz.__init__-330"><span class="linenos">330</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">auth</span> <span class="o">=</span> <span class="n">_pulsar</span><span class="o">.</span><span class="n">AuthenticationAthenz</span><span class="p">(</span><span class="n">auth_params_string</span><span class="p">)</span>
</span></pre></div>
<div class="docstring"><p>Create the Athenz authentication provider instance.</p>
<p><strong>Args</strong></p>
<ul>
<li><code>auth_params_string</code>: JSON encoded configuration for Athenz client</li>
</ul>
</div>
</div>
</section>
<section id="AuthenticationOauth2">
<input id="AuthenticationOauth2-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<div class="attr class">
<span class="def">class</span>
<span class="name">AuthenticationOauth2</span><wbr>(<span class="base"><a href="#Authentication">Authentication</a></span>):
<label class="view-source-button" for="AuthenticationOauth2-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#AuthenticationOauth2"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="AuthenticationOauth2-332"><a href="#AuthenticationOauth2-332"><span class="linenos">332</span></a><span class="k">class</span> <span class="nc">AuthenticationOauth2</span><span class="p">(</span><span class="n">Authentication</span><span class="p">):</span>
</span><span id="AuthenticationOauth2-333"><a href="#AuthenticationOauth2-333"><span class="linenos">333</span></a> <span class="sd">&quot;&quot;&quot;</span>
</span><span id="AuthenticationOauth2-334"><a href="#AuthenticationOauth2-334"><span class="linenos">334</span></a><span class="sd"> Oauth2 Authentication implementation</span>
</span><span id="AuthenticationOauth2-335"><a href="#AuthenticationOauth2-335"><span class="linenos">335</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="AuthenticationOauth2-336"><a href="#AuthenticationOauth2-336"><span class="linenos">336</span></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">auth_params_string</span><span class="p">):</span>
</span><span id="AuthenticationOauth2-337"><a href="#AuthenticationOauth2-337"><span class="linenos">337</span></a> <span class="sd">&quot;&quot;&quot;</span>
</span><span id="AuthenticationOauth2-338"><a href="#AuthenticationOauth2-338"><span class="linenos">338</span></a><span class="sd"> Create the Oauth2 authentication provider instance.</span>
</span><span id="AuthenticationOauth2-339"><a href="#AuthenticationOauth2-339"><span class="linenos">339</span></a>
</span><span id="AuthenticationOauth2-340"><a href="#AuthenticationOauth2-340"><span class="linenos">340</span></a><span class="sd"> **Args**</span>
</span><span id="AuthenticationOauth2-341"><a href="#AuthenticationOauth2-341"><span class="linenos">341</span></a>
</span><span id="AuthenticationOauth2-342"><a href="#AuthenticationOauth2-342"><span class="linenos">342</span></a><span class="sd"> * `auth_params_string`: JSON encoded configuration for Oauth2 client</span>
</span><span id="AuthenticationOauth2-343"><a href="#AuthenticationOauth2-343"><span class="linenos">343</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="AuthenticationOauth2-344"><a href="#AuthenticationOauth2-344"><span class="linenos">344</span></a> <span class="n">_check_type</span><span class="p">(</span><span class="nb">str</span><span class="p">,</span> <span class="n">auth_params_string</span><span class="p">,</span> <span class="s1">&#39;auth_params_string&#39;</span><span class="p">)</span>
</span><span id="AuthenticationOauth2-345"><a href="#AuthenticationOauth2-345"><span class="linenos">345</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">auth</span> <span class="o">=</span> <span class="n">_pulsar</span><span class="o">.</span><span class="n">AuthenticationOauth2</span><span class="p">(</span><span class="n">auth_params_string</span><span class="p">)</span>
</span></pre></div>
<div class="docstring"><p>Oauth2 Authentication implementation</p>
</div>
<div id="AuthenticationOauth2.__init__" class="classattr">
<input id="AuthenticationOauth2.__init__-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<div class="attr function">
<span class="name">AuthenticationOauth2</span><span class="signature pdoc-code condensed">(<span class="param"><span class="n">auth_params_string</span></span>)</span>
<label class="view-source-button" for="AuthenticationOauth2.__init__-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#AuthenticationOauth2.__init__"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="AuthenticationOauth2.__init__-336"><a href="#AuthenticationOauth2.__init__-336"><span class="linenos">336</span></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">auth_params_string</span><span class="p">):</span>
</span><span id="AuthenticationOauth2.__init__-337"><a href="#AuthenticationOauth2.__init__-337"><span class="linenos">337</span></a> <span class="sd">&quot;&quot;&quot;</span>
</span><span id="AuthenticationOauth2.__init__-338"><a href="#AuthenticationOauth2.__init__-338"><span class="linenos">338</span></a><span class="sd"> Create the Oauth2 authentication provider instance.</span>
</span><span id="AuthenticationOauth2.__init__-339"><a href="#AuthenticationOauth2.__init__-339"><span class="linenos">339</span></a>
</span><span id="AuthenticationOauth2.__init__-340"><a href="#AuthenticationOauth2.__init__-340"><span class="linenos">340</span></a><span class="sd"> **Args**</span>
</span><span id="AuthenticationOauth2.__init__-341"><a href="#AuthenticationOauth2.__init__-341"><span class="linenos">341</span></a>
</span><span id="AuthenticationOauth2.__init__-342"><a href="#AuthenticationOauth2.__init__-342"><span class="linenos">342</span></a><span class="sd"> * `auth_params_string`: JSON encoded configuration for Oauth2 client</span>
</span><span id="AuthenticationOauth2.__init__-343"><a href="#AuthenticationOauth2.__init__-343"><span class="linenos">343</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="AuthenticationOauth2.__init__-344"><a href="#AuthenticationOauth2.__init__-344"><span class="linenos">344</span></a> <span class="n">_check_type</span><span class="p">(</span><span class="nb">str</span><span class="p">,</span> <span class="n">auth_params_string</span><span class="p">,</span> <span class="s1">&#39;auth_params_string&#39;</span><span class="p">)</span>
</span><span id="AuthenticationOauth2.__init__-345"><a href="#AuthenticationOauth2.__init__-345"><span class="linenos">345</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">auth</span> <span class="o">=</span> <span class="n">_pulsar</span><span class="o">.</span><span class="n">AuthenticationOauth2</span><span class="p">(</span><span class="n">auth_params_string</span><span class="p">)</span>
</span></pre></div>
<div class="docstring"><p>Create the Oauth2 authentication provider instance.</p>
<p><strong>Args</strong></p>
<ul>
<li><code>auth_params_string</code>: JSON encoded configuration for Oauth2 client</li>
</ul>
</div>
</div>
</section>
<section id="Client">
<input id="Client-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<div class="attr class">
<span class="def">class</span>
<span class="name">Client</span>:
<label class="view-source-button" for="Client-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#Client"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="Client-347"><a href="#Client-347"><span class="linenos">347</span></a><span class="k">class</span> <span class="nc">Client</span><span class="p">:</span>
</span><span id="Client-348"><a href="#Client-348"><span class="linenos">348</span></a> <span class="sd">&quot;&quot;&quot;</span>
</span><span id="Client-349"><a href="#Client-349"><span class="linenos">349</span></a><span class="sd"> The Pulsar client. A single client instance can be used to create producers</span>
</span><span id="Client-350"><a href="#Client-350"><span class="linenos">350</span></a><span class="sd"> and consumers on multiple topics.</span>
</span><span id="Client-351"><a href="#Client-351"><span class="linenos">351</span></a>
</span><span id="Client-352"><a href="#Client-352"><span class="linenos">352</span></a><span class="sd"> The client will share the same connection pool and threads across all</span>
</span><span id="Client-353"><a href="#Client-353"><span class="linenos">353</span></a><span class="sd"> producers and consumers.</span>
</span><span id="Client-354"><a href="#Client-354"><span class="linenos">354</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="Client-355"><a href="#Client-355"><span class="linenos">355</span></a>
</span><span id="Client-356"><a href="#Client-356"><span class="linenos">356</span></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">service_url</span><span class="p">,</span>
</span><span id="Client-357"><a href="#Client-357"><span class="linenos">357</span></a> <span class="n">authentication</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
</span><span id="Client-358"><a href="#Client-358"><span class="linenos">358</span></a> <span class="n">operation_timeout_seconds</span><span class="o">=</span><span class="mi">30</span><span class="p">,</span>
</span><span id="Client-359"><a href="#Client-359"><span class="linenos">359</span></a> <span class="n">io_threads</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span>
</span><span id="Client-360"><a href="#Client-360"><span class="linenos">360</span></a> <span class="n">message_listener_threads</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span>
</span><span id="Client-361"><a href="#Client-361"><span class="linenos">361</span></a> <span class="n">concurrent_lookup_requests</span><span class="o">=</span><span class="mi">50000</span><span class="p">,</span>
</span><span id="Client-362"><a href="#Client-362"><span class="linenos">362</span></a> <span class="n">log_conf_file_path</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
</span><span id="Client-363"><a href="#Client-363"><span class="linenos">363</span></a> <span class="n">use_tls</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
</span><span id="Client-364"><a href="#Client-364"><span class="linenos">364</span></a> <span class="n">tls_trust_certs_file_path</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
</span><span id="Client-365"><a href="#Client-365"><span class="linenos">365</span></a> <span class="n">tls_allow_insecure_connection</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
</span><span id="Client-366"><a href="#Client-366"><span class="linenos">366</span></a> <span class="n">tls_validate_hostname</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
</span><span id="Client-367"><a href="#Client-367"><span class="linenos">367</span></a> <span class="n">logger</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
</span><span id="Client-368"><a href="#Client-368"><span class="linenos">368</span></a> <span class="n">connection_timeout_ms</span><span class="o">=</span><span class="mi">10000</span><span class="p">,</span>
</span><span id="Client-369"><a href="#Client-369"><span class="linenos">369</span></a> <span class="p">):</span>
</span><span id="Client-370"><a href="#Client-370"><span class="linenos">370</span></a> <span class="sd">&quot;&quot;&quot;</span>
</span><span id="Client-371"><a href="#Client-371"><span class="linenos">371</span></a><span class="sd"> Create a new Pulsar client instance.</span>
</span><span id="Client-372"><a href="#Client-372"><span class="linenos">372</span></a>
</span><span id="Client-373"><a href="#Client-373"><span class="linenos">373</span></a><span class="sd"> **Args**</span>
</span><span id="Client-374"><a href="#Client-374"><span class="linenos">374</span></a>
</span><span id="Client-375"><a href="#Client-375"><span class="linenos">375</span></a><span class="sd"> * `service_url`: The Pulsar service url eg: pulsar://my-broker.com:6650/</span>
</span><span id="Client-376"><a href="#Client-376"><span class="linenos">376</span></a>
</span><span id="Client-377"><a href="#Client-377"><span class="linenos">377</span></a><span class="sd"> **Options**</span>
</span><span id="Client-378"><a href="#Client-378"><span class="linenos">378</span></a>
</span><span id="Client-379"><a href="#Client-379"><span class="linenos">379</span></a><span class="sd"> * `authentication`:</span>
</span><span id="Client-380"><a href="#Client-380"><span class="linenos">380</span></a><span class="sd"> Set the authentication provider to be used with the broker. For example:</span>
</span><span id="Client-381"><a href="#Client-381"><span class="linenos">381</span></a><span class="sd"> `AuthenticationTls`, AuthenticaionToken, `AuthenticationAthenz`or `AuthenticationOauth2`</span>
</span><span id="Client-382"><a href="#Client-382"><span class="linenos">382</span></a><span class="sd"> * `operation_timeout_seconds`:</span>
</span><span id="Client-383"><a href="#Client-383"><span class="linenos">383</span></a><span class="sd"> Set timeout on client operations (subscribe, create producer, close,</span>
</span><span id="Client-384"><a href="#Client-384"><span class="linenos">384</span></a><span class="sd"> unsubscribe).</span>
</span><span id="Client-385"><a href="#Client-385"><span class="linenos">385</span></a><span class="sd"> * `io_threads`:</span>
</span><span id="Client-386"><a href="#Client-386"><span class="linenos">386</span></a><span class="sd"> Set the number of IO threads to be used by the Pulsar client.</span>
</span><span id="Client-387"><a href="#Client-387"><span class="linenos">387</span></a><span class="sd"> * `message_listener_threads`:</span>
</span><span id="Client-388"><a href="#Client-388"><span class="linenos">388</span></a><span class="sd"> Set the number of threads to be used by the Pulsar client when</span>
</span><span id="Client-389"><a href="#Client-389"><span class="linenos">389</span></a><span class="sd"> delivering messages through message listener. The default is 1 thread</span>
</span><span id="Client-390"><a href="#Client-390"><span class="linenos">390</span></a><span class="sd"> per Pulsar client. If using more than 1 thread, messages for distinct</span>
</span><span id="Client-391"><a href="#Client-391"><span class="linenos">391</span></a><span class="sd"> `message_listener`s will be delivered in different threads, however a</span>
</span><span id="Client-392"><a href="#Client-392"><span class="linenos">392</span></a><span class="sd"> single `MessageListener` will always be assigned to the same thread.</span>
</span><span id="Client-393"><a href="#Client-393"><span class="linenos">393</span></a><span class="sd"> * `concurrent_lookup_requests`:</span>
</span><span id="Client-394"><a href="#Client-394"><span class="linenos">394</span></a><span class="sd"> Number of concurrent lookup-requests allowed on each broker connection</span>
</span><span id="Client-395"><a href="#Client-395"><span class="linenos">395</span></a><span class="sd"> to prevent overload on the broker.</span>
</span><span id="Client-396"><a href="#Client-396"><span class="linenos">396</span></a><span class="sd"> * `log_conf_file_path`:</span>
</span><span id="Client-397"><a href="#Client-397"><span class="linenos">397</span></a><span class="sd"> Initialize log4cxx from a configuration file.</span>
</span><span id="Client-398"><a href="#Client-398"><span class="linenos">398</span></a><span class="sd"> * `use_tls`:</span>
</span><span id="Client-399"><a href="#Client-399"><span class="linenos">399</span></a><span class="sd"> Configure whether to use TLS encryption on the connection. This setting</span>
</span><span id="Client-400"><a href="#Client-400"><span class="linenos">400</span></a><span class="sd"> is deprecated. TLS will be automatically enabled if the `serviceUrl` is</span>
</span><span id="Client-401"><a href="#Client-401"><span class="linenos">401</span></a><span class="sd"> set to `pulsar+ssl://` or `https://`</span>
</span><span id="Client-402"><a href="#Client-402"><span class="linenos">402</span></a><span class="sd"> * `tls_trust_certs_file_path`:</span>
</span><span id="Client-403"><a href="#Client-403"><span class="linenos">403</span></a><span class="sd"> Set the path to the trusted TLS certificate file. If empty defaults to</span>
</span><span id="Client-404"><a href="#Client-404"><span class="linenos">404</span></a><span class="sd"> certifi.</span>
</span><span id="Client-405"><a href="#Client-405"><span class="linenos">405</span></a><span class="sd"> * `tls_allow_insecure_connection`:</span>
</span><span id="Client-406"><a href="#Client-406"><span class="linenos">406</span></a><span class="sd"> Configure whether the Pulsar client accepts untrusted TLS certificates</span>
</span><span id="Client-407"><a href="#Client-407"><span class="linenos">407</span></a><span class="sd"> from the broker.</span>
</span><span id="Client-408"><a href="#Client-408"><span class="linenos">408</span></a><span class="sd"> * `tls_validate_hostname`:</span>
</span><span id="Client-409"><a href="#Client-409"><span class="linenos">409</span></a><span class="sd"> Configure whether the Pulsar client validates that the hostname of the</span>
</span><span id="Client-410"><a href="#Client-410"><span class="linenos">410</span></a><span class="sd"> endpoint, matches the common name on the TLS certificate presented by</span>
</span><span id="Client-411"><a href="#Client-411"><span class="linenos">411</span></a><span class="sd"> the endpoint.</span>
</span><span id="Client-412"><a href="#Client-412"><span class="linenos">412</span></a><span class="sd"> * `logger`:</span>
</span><span id="Client-413"><a href="#Client-413"><span class="linenos">413</span></a><span class="sd"> Set a Python logger for this Pulsar client. Should be an instance of `logging.Logger`.</span>
</span><span id="Client-414"><a href="#Client-414"><span class="linenos">414</span></a><span class="sd"> * `connection_timeout_ms`:</span>
</span><span id="Client-415"><a href="#Client-415"><span class="linenos">415</span></a><span class="sd"> Set timeout in milliseconds on TCP connections.</span>
</span><span id="Client-416"><a href="#Client-416"><span class="linenos">416</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="Client-417"><a href="#Client-417"><span class="linenos">417</span></a> <span class="n">_check_type</span><span class="p">(</span><span class="nb">str</span><span class="p">,</span> <span class="n">service_url</span><span class="p">,</span> <span class="s1">&#39;service_url&#39;</span><span class="p">)</span>
</span><span id="Client-418"><a href="#Client-418"><span class="linenos">418</span></a> <span class="n">_check_type_or_none</span><span class="p">(</span><span class="n">Authentication</span><span class="p">,</span> <span class="n">authentication</span><span class="p">,</span> <span class="s1">&#39;authentication&#39;</span><span class="p">)</span>
</span><span id="Client-419"><a href="#Client-419"><span class="linenos">419</span></a> <span class="n">_check_type</span><span class="p">(</span><span class="nb">int</span><span class="p">,</span> <span class="n">operation_timeout_seconds</span><span class="p">,</span> <span class="s1">&#39;operation_timeout_seconds&#39;</span><span class="p">)</span>
</span><span id="Client-420"><a href="#Client-420"><span class="linenos">420</span></a> <span class="n">_check_type</span><span class="p">(</span><span class="nb">int</span><span class="p">,</span> <span class="n">connection_timeout_ms</span><span class="p">,</span> <span class="s1">&#39;connection_timeout_ms&#39;</span><span class="p">)</span>
</span><span id="Client-421"><a href="#Client-421"><span class="linenos">421</span></a> <span class="n">_check_type</span><span class="p">(</span><span class="nb">int</span><span class="p">,</span> <span class="n">io_threads</span><span class="p">,</span> <span class="s1">&#39;io_threads&#39;</span><span class="p">)</span>
</span><span id="Client-422"><a href="#Client-422"><span class="linenos">422</span></a> <span class="n">_check_type</span><span class="p">(</span><span class="nb">int</span><span class="p">,</span> <span class="n">message_listener_threads</span><span class="p">,</span> <span class="s1">&#39;message_listener_threads&#39;</span><span class="p">)</span>
</span><span id="Client-423"><a href="#Client-423"><span class="linenos">423</span></a> <span class="n">_check_type</span><span class="p">(</span><span class="nb">int</span><span class="p">,</span> <span class="n">concurrent_lookup_requests</span><span class="p">,</span> <span class="s1">&#39;concurrent_lookup_requests&#39;</span><span class="p">)</span>
</span><span id="Client-424"><a href="#Client-424"><span class="linenos">424</span></a> <span class="n">_check_type_or_none</span><span class="p">(</span><span class="nb">str</span><span class="p">,</span> <span class="n">log_conf_file_path</span><span class="p">,</span> <span class="s1">&#39;log_conf_file_path&#39;</span><span class="p">)</span>
</span><span id="Client-425"><a href="#Client-425"><span class="linenos">425</span></a> <span class="n">_check_type</span><span class="p">(</span><span class="nb">bool</span><span class="p">,</span> <span class="n">use_tls</span><span class="p">,</span> <span class="s1">&#39;use_tls&#39;</span><span class="p">)</span>
</span><span id="Client-426"><a href="#Client-426"><span class="linenos">426</span></a> <span class="n">_check_type_or_none</span><span class="p">(</span><span class="nb">str</span><span class="p">,</span> <span class="n">tls_trust_certs_file_path</span><span class="p">,</span> <span class="s1">&#39;tls_trust_certs_file_path&#39;</span><span class="p">)</span>
</span><span id="Client-427"><a href="#Client-427"><span class="linenos">427</span></a> <span class="n">_check_type</span><span class="p">(</span><span class="nb">bool</span><span class="p">,</span> <span class="n">tls_allow_insecure_connection</span><span class="p">,</span> <span class="s1">&#39;tls_allow_insecure_connection&#39;</span><span class="p">)</span>
</span><span id="Client-428"><a href="#Client-428"><span class="linenos">428</span></a> <span class="n">_check_type</span><span class="p">(</span><span class="nb">bool</span><span class="p">,</span> <span class="n">tls_validate_hostname</span><span class="p">,</span> <span class="s1">&#39;tls_validate_hostname&#39;</span><span class="p">)</span>
</span><span id="Client-429"><a href="#Client-429"><span class="linenos">429</span></a> <span class="n">_check_type_or_none</span><span class="p">(</span><span class="n">logging</span><span class="o">.</span><span class="n">Logger</span><span class="p">,</span> <span class="n">logger</span><span class="p">,</span> <span class="s1">&#39;logger&#39;</span><span class="p">)</span>
</span><span id="Client-430"><a href="#Client-430"><span class="linenos">430</span></a>
</span><span id="Client-431"><a href="#Client-431"><span class="linenos">431</span></a> <span class="n">conf</span> <span class="o">=</span> <span class="n">_pulsar</span><span class="o">.</span><span class="n">ClientConfiguration</span><span class="p">()</span>
</span><span id="Client-432"><a href="#Client-432"><span class="linenos">432</span></a> <span class="k">if</span> <span class="n">authentication</span><span class="p">:</span>
</span><span id="Client-433"><a href="#Client-433"><span class="linenos">433</span></a> <span class="n">conf</span><span class="o">.</span><span class="n">authentication</span><span class="p">(</span><span class="n">authentication</span><span class="o">.</span><span class="n">auth</span><span class="p">)</span>
</span><span id="Client-434"><a href="#Client-434"><span class="linenos">434</span></a> <span class="n">conf</span><span class="o">.</span><span class="n">operation_timeout_seconds</span><span class="p">(</span><span class="n">operation_timeout_seconds</span><span class="p">)</span>
</span><span id="Client-435"><a href="#Client-435"><span class="linenos">435</span></a> <span class="n">conf</span><span class="o">.</span><span class="n">connection_timeout</span><span class="p">(</span><span class="n">connection_timeout_ms</span><span class="p">)</span>
</span><span id="Client-436"><a href="#Client-436"><span class="linenos">436</span></a> <span class="n">conf</span><span class="o">.</span><span class="n">io_threads</span><span class="p">(</span><span class="n">io_threads</span><span class="p">)</span>
</span><span id="Client-437"><a href="#Client-437"><span class="linenos">437</span></a> <span class="n">conf</span><span class="o">.</span><span class="n">message_listener_threads</span><span class="p">(</span><span class="n">message_listener_threads</span><span class="p">)</span>
</span><span id="Client-438"><a href="#Client-438"><span class="linenos">438</span></a> <span class="n">conf</span><span class="o">.</span><span class="n">concurrent_lookup_requests</span><span class="p">(</span><span class="n">concurrent_lookup_requests</span><span class="p">)</span>
</span><span id="Client-439"><a href="#Client-439"><span class="linenos">439</span></a> <span class="k">if</span> <span class="n">log_conf_file_path</span><span class="p">:</span>
</span><span id="Client-440"><a href="#Client-440"><span class="linenos">440</span></a> <span class="n">conf</span><span class="o">.</span><span class="n">log_conf_file_path</span><span class="p">(</span><span class="n">log_conf_file_path</span><span class="p">)</span>
</span><span id="Client-441"><a href="#Client-441"><span class="linenos">441</span></a> <span class="k">if</span> <span class="n">logger</span><span class="p">:</span>
</span><span id="Client-442"><a href="#Client-442"><span class="linenos">442</span></a> <span class="n">conf</span><span class="o">.</span><span class="n">set_logger</span><span class="p">(</span><span class="n">logger</span><span class="p">)</span>
</span><span id="Client-443"><a href="#Client-443"><span class="linenos">443</span></a> <span class="k">if</span> <span class="n">use_tls</span> <span class="ow">or</span> <span class="n">service_url</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s1">&#39;pulsar+ssl://&#39;</span><span class="p">)</span> <span class="ow">or</span> <span class="n">service_url</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s1">&#39;https://&#39;</span><span class="p">):</span>
</span><span id="Client-444"><a href="#Client-444"><span class="linenos">444</span></a> <span class="n">conf</span><span class="o">.</span><span class="n">use_tls</span><span class="p">(</span><span class="kc">True</span><span class="p">)</span>
</span><span id="Client-445"><a href="#Client-445"><span class="linenos">445</span></a> <span class="k">if</span> <span class="n">tls_trust_certs_file_path</span><span class="p">:</span>
</span><span id="Client-446"><a href="#Client-446"><span class="linenos">446</span></a> <span class="n">conf</span><span class="o">.</span><span class="n">tls_trust_certs_file_path</span><span class="p">(</span><span class="n">tls_trust_certs_file_path</span><span class="p">)</span>
</span><span id="Client-447"><a href="#Client-447"><span class="linenos">447</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="Client-448"><a href="#Client-448"><span class="linenos">448</span></a> <span class="n">conf</span><span class="o">.</span><span class="n">tls_trust_certs_file_path</span><span class="p">(</span><span class="n">certifi</span><span class="o">.</span><span class="n">where</span><span class="p">())</span>
</span><span id="Client-449"><a href="#Client-449"><span class="linenos">449</span></a> <span class="n">conf</span><span class="o">.</span><span class="n">tls_allow_insecure_connection</span><span class="p">(</span><span class="n">tls_allow_insecure_connection</span><span class="p">)</span>
</span><span id="Client-450"><a href="#Client-450"><span class="linenos">450</span></a> <span class="n">conf</span><span class="o">.</span><span class="n">tls_validate_hostname</span><span class="p">(</span><span class="n">tls_validate_hostname</span><span class="p">)</span>
</span><span id="Client-451"><a href="#Client-451"><span class="linenos">451</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_client</span> <span class="o">=</span> <span class="n">_pulsar</span><span class="o">.</span><span class="n">Client</span><span class="p">(</span><span class="n">service_url</span><span class="p">,</span> <span class="n">conf</span><span class="p">)</span>
</span><span id="Client-452"><a href="#Client-452"><span class="linenos">452</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_consumers</span> <span class="o">=</span> <span class="p">[]</span>
</span><span id="Client-453"><a href="#Client-453"><span class="linenos">453</span></a>
</span><span id="Client-454"><a href="#Client-454"><span class="linenos">454</span></a> <span class="k">def</span> <span class="nf">create_producer</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">topic</span><span class="p">,</span>
</span><span id="Client-455"><a href="#Client-455"><span class="linenos">455</span></a> <span class="n">producer_name</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
</span><span id="Client-456"><a href="#Client-456"><span class="linenos">456</span></a> <span class="n">schema</span><span class="o">=</span><span class="n">schema</span><span class="o">.</span><span class="n">BytesSchema</span><span class="p">(),</span>
</span><span id="Client-457"><a href="#Client-457"><span class="linenos">457</span></a> <span class="n">initial_sequence_id</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
</span><span id="Client-458"><a href="#Client-458"><span class="linenos">458</span></a> <span class="n">send_timeout_millis</span><span class="o">=</span><span class="mi">30000</span><span class="p">,</span>
</span><span id="Client-459"><a href="#Client-459"><span class="linenos">459</span></a> <span class="n">compression_type</span><span class="o">=</span><span class="n">CompressionType</span><span class="o">.</span><span class="n">NONE</span><span class="p">,</span>
</span><span id="Client-460"><a href="#Client-460"><span class="linenos">460</span></a> <span class="n">max_pending_messages</span><span class="o">=</span><span class="mi">1000</span><span class="p">,</span>
</span><span id="Client-461"><a href="#Client-461"><span class="linenos">461</span></a> <span class="n">max_pending_messages_across_partitions</span><span class="o">=</span><span class="mi">50000</span><span class="p">,</span>
</span><span id="Client-462"><a href="#Client-462"><span class="linenos">462</span></a> <span class="n">block_if_queue_full</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
</span><span id="Client-463"><a href="#Client-463"><span class="linenos">463</span></a> <span class="n">batching_enabled</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
</span><span id="Client-464"><a href="#Client-464"><span class="linenos">464</span></a> <span class="n">batching_max_messages</span><span class="o">=</span><span class="mi">1000</span><span class="p">,</span>
</span><span id="Client-465"><a href="#Client-465"><span class="linenos">465</span></a> <span class="n">batching_max_allowed_size_in_bytes</span><span class="o">=</span><span class="mi">128</span><span class="o">*</span><span class="mi">1024</span><span class="p">,</span>
</span><span id="Client-466"><a href="#Client-466"><span class="linenos">466</span></a> <span class="n">batching_max_publish_delay_ms</span><span class="o">=</span><span class="mi">10</span><span class="p">,</span>
</span><span id="Client-467"><a href="#Client-467"><span class="linenos">467</span></a> <span class="n">message_routing_mode</span><span class="o">=</span><span class="n">PartitionsRoutingMode</span><span class="o">.</span><span class="n">RoundRobinDistribution</span><span class="p">,</span>
</span><span id="Client-468"><a href="#Client-468"><span class="linenos">468</span></a> <span class="n">lazy_start_partitioned_producers</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
</span><span id="Client-469"><a href="#Client-469"><span class="linenos">469</span></a> <span class="n">properties</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
</span><span id="Client-470"><a href="#Client-470"><span class="linenos">470</span></a> <span class="n">batching_type</span><span class="o">=</span><span class="n">BatchingType</span><span class="o">.</span><span class="n">Default</span><span class="p">,</span>
</span><span id="Client-471"><a href="#Client-471"><span class="linenos">471</span></a> <span class="n">encryption_key</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
</span><span id="Client-472"><a href="#Client-472"><span class="linenos">472</span></a> <span class="n">crypto_key_reader</span><span class="o">=</span><span class="kc">None</span>
</span><span id="Client-473"><a href="#Client-473"><span class="linenos">473</span></a> <span class="p">):</span>
</span><span id="Client-474"><a href="#Client-474"><span class="linenos">474</span></a> <span class="sd">&quot;&quot;&quot;</span>
</span><span id="Client-475"><a href="#Client-475"><span class="linenos">475</span></a><span class="sd"> Create a new producer on a given topic.</span>
</span><span id="Client-476"><a href="#Client-476"><span class="linenos">476</span></a>
</span><span id="Client-477"><a href="#Client-477"><span class="linenos">477</span></a><span class="sd"> **Args**</span>
</span><span id="Client-478"><a href="#Client-478"><span class="linenos">478</span></a>
</span><span id="Client-479"><a href="#Client-479"><span class="linenos">479</span></a><span class="sd"> * `topic`:</span>
</span><span id="Client-480"><a href="#Client-480"><span class="linenos">480</span></a><span class="sd"> The topic name</span>
</span><span id="Client-481"><a href="#Client-481"><span class="linenos">481</span></a>
</span><span id="Client-482"><a href="#Client-482"><span class="linenos">482</span></a><span class="sd"> **Options**</span>
</span><span id="Client-483"><a href="#Client-483"><span class="linenos">483</span></a>
</span><span id="Client-484"><a href="#Client-484"><span class="linenos">484</span></a><span class="sd"> * `producer_name`:</span>
</span><span id="Client-485"><a href="#Client-485"><span class="linenos">485</span></a><span class="sd"> Specify a name for the producer. If not assigned,</span>
</span><span id="Client-486"><a href="#Client-486"><span class="linenos">486</span></a><span class="sd"> the system will generate a globally unique name which can be accessed</span>
</span><span id="Client-487"><a href="#Client-487"><span class="linenos">487</span></a><span class="sd"> with `Producer.producer_name()`. When specifying a name, it is app to</span>
</span><span id="Client-488"><a href="#Client-488"><span class="linenos">488</span></a><span class="sd"> the user to ensure that, for a given topic, the producer name is unique</span>
</span><span id="Client-489"><a href="#Client-489"><span class="linenos">489</span></a><span class="sd"> across all Pulsar&#39;s clusters.</span>
</span><span id="Client-490"><a href="#Client-490"><span class="linenos">490</span></a><span class="sd"> * `schema`:</span>
</span><span id="Client-491"><a href="#Client-491"><span class="linenos">491</span></a><span class="sd"> Define the schema of the data that will be published by this producer.</span>
</span><span id="Client-492"><a href="#Client-492"><span class="linenos">492</span></a><span class="sd"> The schema will be used for two purposes:</span>
</span><span id="Client-493"><a href="#Client-493"><span class="linenos">493</span></a><span class="sd"> - Validate the data format against the topic defined schema</span>
</span><span id="Client-494"><a href="#Client-494"><span class="linenos">494</span></a><span class="sd"> - Perform serialization/deserialization between data and objects</span>
</span><span id="Client-495"><a href="#Client-495"><span class="linenos">495</span></a><span class="sd"> An example for this parameter would be to pass `schema=JsonSchema(MyRecordClass)`.</span>
</span><span id="Client-496"><a href="#Client-496"><span class="linenos">496</span></a><span class="sd"> * `initial_sequence_id`:</span>
</span><span id="Client-497"><a href="#Client-497"><span class="linenos">497</span></a><span class="sd"> Set the baseline for the sequence ids for messages</span>
</span><span id="Client-498"><a href="#Client-498"><span class="linenos">498</span></a><span class="sd"> published by the producer. First message will be using</span>
</span><span id="Client-499"><a href="#Client-499"><span class="linenos">499</span></a><span class="sd"> `(initialSequenceId + 1)`` as its sequence id and subsequent messages will</span>
</span><span id="Client-500"><a href="#Client-500"><span class="linenos">500</span></a><span class="sd"> be assigned incremental sequence ids, if not otherwise specified.</span>
</span><span id="Client-501"><a href="#Client-501"><span class="linenos">501</span></a><span class="sd"> * `send_timeout_millis`:</span>
</span><span id="Client-502"><a href="#Client-502"><span class="linenos">502</span></a><span class="sd"> If a message is not acknowledged by the server before the</span>
</span><span id="Client-503"><a href="#Client-503"><span class="linenos">503</span></a><span class="sd"> `send_timeout` expires, an error will be reported.</span>
</span><span id="Client-504"><a href="#Client-504"><span class="linenos">504</span></a><span class="sd"> * `compression_type`:</span>
</span><span id="Client-505"><a href="#Client-505"><span class="linenos">505</span></a><span class="sd"> Set the compression type for the producer. By default, message</span>
</span><span id="Client-506"><a href="#Client-506"><span class="linenos">506</span></a><span class="sd"> payloads are not compressed. Supported compression types are</span>
</span><span id="Client-507"><a href="#Client-507"><span class="linenos">507</span></a><span class="sd"> `CompressionType.LZ4`, `CompressionType.ZLib`, `CompressionType.ZSTD` and `CompressionType.SNAPPY`.</span>
</span><span id="Client-508"><a href="#Client-508"><span class="linenos">508</span></a><span class="sd"> ZSTD is supported since Pulsar 2.3. Consumers will need to be at least at that</span>
</span><span id="Client-509"><a href="#Client-509"><span class="linenos">509</span></a><span class="sd"> release in order to be able to receive messages compressed with ZSTD.</span>
</span><span id="Client-510"><a href="#Client-510"><span class="linenos">510</span></a><span class="sd"> SNAPPY is supported since Pulsar 2.4. Consumers will need to be at least at that</span>
</span><span id="Client-511"><a href="#Client-511"><span class="linenos">511</span></a><span class="sd"> release in order to be able to receive messages compressed with SNAPPY.</span>
</span><span id="Client-512"><a href="#Client-512"><span class="linenos">512</span></a><span class="sd"> * `max_pending_messages`:</span>
</span><span id="Client-513"><a href="#Client-513"><span class="linenos">513</span></a><span class="sd"> Set the max size of the queue holding the messages pending to receive</span>
</span><span id="Client-514"><a href="#Client-514"><span class="linenos">514</span></a><span class="sd"> an acknowledgment from the broker.</span>
</span><span id="Client-515"><a href="#Client-515"><span class="linenos">515</span></a><span class="sd"> * `max_pending_messages_across_partitions`:</span>
</span><span id="Client-516"><a href="#Client-516"><span class="linenos">516</span></a><span class="sd"> Set the max size of the queue holding the messages pending to receive</span>
</span><span id="Client-517"><a href="#Client-517"><span class="linenos">517</span></a><span class="sd"> an acknowledgment across partitions from the broker.</span>
</span><span id="Client-518"><a href="#Client-518"><span class="linenos">518</span></a><span class="sd"> * `block_if_queue_full`: Set whether `send_async` operations should</span>
</span><span id="Client-519"><a href="#Client-519"><span class="linenos">519</span></a><span class="sd"> block when the outgoing message queue is full.</span>
</span><span id="Client-520"><a href="#Client-520"><span class="linenos">520</span></a><span class="sd"> * `message_routing_mode`:</span>
</span><span id="Client-521"><a href="#Client-521"><span class="linenos">521</span></a><span class="sd"> Set the message routing mode for the partitioned producer. Default is `PartitionsRoutingMode.RoundRobinDistribution`,</span>
</span><span id="Client-522"><a href="#Client-522"><span class="linenos">522</span></a><span class="sd"> other option is `PartitionsRoutingMode.UseSinglePartition`</span>
</span><span id="Client-523"><a href="#Client-523"><span class="linenos">523</span></a><span class="sd"> * `lazy_start_partitioned_producers`:</span>
</span><span id="Client-524"><a href="#Client-524"><span class="linenos">524</span></a><span class="sd"> This config affects producers of partitioned topics only. It controls whether</span>
</span><span id="Client-525"><a href="#Client-525"><span class="linenos">525</span></a><span class="sd"> producers register and connect immediately to the owner broker of each partition</span>
</span><span id="Client-526"><a href="#Client-526"><span class="linenos">526</span></a><span class="sd"> or start lazily on demand. The internal producer of one partition is always</span>
</span><span id="Client-527"><a href="#Client-527"><span class="linenos">527</span></a><span class="sd"> started eagerly, chosen by the routing policy, but the internal producers of</span>
</span><span id="Client-528"><a href="#Client-528"><span class="linenos">528</span></a><span class="sd"> any additional partitions are started on demand, upon receiving their first</span>
</span><span id="Client-529"><a href="#Client-529"><span class="linenos">529</span></a><span class="sd"> message.</span>
</span><span id="Client-530"><a href="#Client-530"><span class="linenos">530</span></a><span class="sd"> Using this mode can reduce the strain on brokers for topics with large numbers of</span>
</span><span id="Client-531"><a href="#Client-531"><span class="linenos">531</span></a><span class="sd"> partitions and when the SinglePartition routing policy is used without keyed messages.</span>
</span><span id="Client-532"><a href="#Client-532"><span class="linenos">532</span></a><span class="sd"> Because producer connection can be on demand, this can produce extra send latency</span>
</span><span id="Client-533"><a href="#Client-533"><span class="linenos">533</span></a><span class="sd"> for the first messages of a given partition.</span>
</span><span id="Client-534"><a href="#Client-534"><span class="linenos">534</span></a><span class="sd"> * `properties`:</span>
</span><span id="Client-535"><a href="#Client-535"><span class="linenos">535</span></a><span class="sd"> Sets the properties for the producer. The properties associated with a producer</span>
</span><span id="Client-536"><a href="#Client-536"><span class="linenos">536</span></a><span class="sd"> can be used for identify a producer at broker side.</span>
</span><span id="Client-537"><a href="#Client-537"><span class="linenos">537</span></a><span class="sd"> * `batching_type`:</span>
</span><span id="Client-538"><a href="#Client-538"><span class="linenos">538</span></a><span class="sd"> Sets the batching type for the producer.</span>
</span><span id="Client-539"><a href="#Client-539"><span class="linenos">539</span></a><span class="sd"> There are two batching type: DefaultBatching and KeyBasedBatching.</span>
</span><span id="Client-540"><a href="#Client-540"><span class="linenos">540</span></a><span class="sd"> - Default batching</span>
</span><span id="Client-541"><a href="#Client-541"><span class="linenos">541</span></a><span class="sd"> incoming single messages:</span>
</span><span id="Client-542"><a href="#Client-542"><span class="linenos">542</span></a><span class="sd"> (k1, v1), (k2, v1), (k3, v1), (k1, v2), (k2, v2), (k3, v2), (k1, v3), (k2, v3), (k3, v3)</span>
</span><span id="Client-543"><a href="#Client-543"><span class="linenos">543</span></a><span class="sd"> batched into single batch message:</span>
</span><span id="Client-544"><a href="#Client-544"><span class="linenos">544</span></a><span class="sd"> [(k1, v1), (k2, v1), (k3, v1), (k1, v2), (k2, v2), (k3, v2), (k1, v3), (k2, v3), (k3, v3)]</span>
</span><span id="Client-545"><a href="#Client-545"><span class="linenos">545</span></a>
</span><span id="Client-546"><a href="#Client-546"><span class="linenos">546</span></a><span class="sd"> - KeyBasedBatching</span>
</span><span id="Client-547"><a href="#Client-547"><span class="linenos">547</span></a><span class="sd"> incoming single messages:</span>
</span><span id="Client-548"><a href="#Client-548"><span class="linenos">548</span></a><span class="sd"> (k1, v1), (k2, v1), (k3, v1), (k1, v2), (k2, v2), (k3, v2), (k1, v3), (k2, v3), (k3, v3)</span>
</span><span id="Client-549"><a href="#Client-549"><span class="linenos">549</span></a><span class="sd"> batched into single batch message:</span>
</span><span id="Client-550"><a href="#Client-550"><span class="linenos">550</span></a><span class="sd"> [(k1, v1), (k1, v2), (k1, v3)], [(k2, v1), (k2, v2), (k2, v3)], [(k3, v1), (k3, v2), (k3, v3)]</span>
</span><span id="Client-551"><a href="#Client-551"><span class="linenos">551</span></a><span class="sd"> * encryption_key:</span>
</span><span id="Client-552"><a href="#Client-552"><span class="linenos">552</span></a><span class="sd"> The key used for symmetric encryption, configured on the producer side</span>
</span><span id="Client-553"><a href="#Client-553"><span class="linenos">553</span></a><span class="sd"> * crypto_key_reader:</span>
</span><span id="Client-554"><a href="#Client-554"><span class="linenos">554</span></a><span class="sd"> Symmetric encryption class implementation, configuring public key encryption messages for the producer</span>
</span><span id="Client-555"><a href="#Client-555"><span class="linenos">555</span></a><span class="sd"> and private key decryption messages for the consumer</span>
</span><span id="Client-556"><a href="#Client-556"><span class="linenos">556</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="Client-557"><a href="#Client-557"><span class="linenos">557</span></a> <span class="n">_check_type</span><span class="p">(</span><span class="nb">str</span><span class="p">,</span> <span class="n">topic</span><span class="p">,</span> <span class="s1">&#39;topic&#39;</span><span class="p">)</span>
</span><span id="Client-558"><a href="#Client-558"><span class="linenos">558</span></a> <span class="n">_check_type_or_none</span><span class="p">(</span><span class="nb">str</span><span class="p">,</span> <span class="n">producer_name</span><span class="p">,</span> <span class="s1">&#39;producer_name&#39;</span><span class="p">)</span>
</span><span id="Client-559"><a href="#Client-559"><span class="linenos">559</span></a> <span class="n">_check_type</span><span class="p">(</span><span class="n">_schema</span><span class="o">.</span><span class="n">Schema</span><span class="p">,</span> <span class="n">schema</span><span class="p">,</span> <span class="s1">&#39;schema&#39;</span><span class="p">)</span>
</span><span id="Client-560"><a href="#Client-560"><span class="linenos">560</span></a> <span class="n">_check_type_or_none</span><span class="p">(</span><span class="nb">int</span><span class="p">,</span> <span class="n">initial_sequence_id</span><span class="p">,</span> <span class="s1">&#39;initial_sequence_id&#39;</span><span class="p">)</span>
</span><span id="Client-561"><a href="#Client-561"><span class="linenos">561</span></a> <span class="n">_check_type</span><span class="p">(</span><span class="nb">int</span><span class="p">,</span> <span class="n">send_timeout_millis</span><span class="p">,</span> <span class="s1">&#39;send_timeout_millis&#39;</span><span class="p">)</span>
</span><span id="Client-562"><a href="#Client-562"><span class="linenos">562</span></a> <span class="n">_check_type</span><span class="p">(</span><span class="n">CompressionType</span><span class="p">,</span> <span class="n">compression_type</span><span class="p">,</span> <span class="s1">&#39;compression_type&#39;</span><span class="p">)</span>
</span><span id="Client-563"><a href="#Client-563"><span class="linenos">563</span></a> <span class="n">_check_type</span><span class="p">(</span><span class="nb">int</span><span class="p">,</span> <span class="n">max_pending_messages</span><span class="p">,</span> <span class="s1">&#39;max_pending_messages&#39;</span><span class="p">)</span>
</span><span id="Client-564"><a href="#Client-564"><span class="linenos">564</span></a> <span class="n">_check_type</span><span class="p">(</span><span class="nb">int</span><span class="p">,</span> <span class="n">max_pending_messages_across_partitions</span><span class="p">,</span> <span class="s1">&#39;max_pending_messages_across_partitions&#39;</span><span class="p">)</span>
</span><span id="Client-565"><a href="#Client-565"><span class="linenos">565</span></a> <span class="n">_check_type</span><span class="p">(</span><span class="nb">bool</span><span class="p">,</span> <span class="n">block_if_queue_full</span><span class="p">,</span> <span class="s1">&#39;block_if_queue_full&#39;</span><span class="p">)</span>
</span><span id="Client-566"><a href="#Client-566"><span class="linenos">566</span></a> <span class="n">_check_type</span><span class="p">(</span><span class="nb">bool</span><span class="p">,</span> <span class="n">batching_enabled</span><span class="p">,</span> <span class="s1">&#39;batching_enabled&#39;</span><span class="p">)</span>
</span><span id="Client-567"><a href="#Client-567"><span class="linenos">567</span></a> <span class="n">_check_type</span><span class="p">(</span><span class="nb">int</span><span class="p">,</span> <span class="n">batching_max_messages</span><span class="p">,</span> <span class="s1">&#39;batching_max_messages&#39;</span><span class="p">)</span>
</span><span id="Client-568"><a href="#Client-568"><span class="linenos">568</span></a> <span class="n">_check_type</span><span class="p">(</span><span class="nb">int</span><span class="p">,</span> <span class="n">batching_max_allowed_size_in_bytes</span><span class="p">,</span> <span class="s1">&#39;batching_max_allowed_size_in_bytes&#39;</span><span class="p">)</span>
</span><span id="Client-569"><a href="#Client-569"><span class="linenos">569</span></a> <span class="n">_check_type</span><span class="p">(</span><span class="nb">int</span><span class="p">,</span> <span class="n">batching_max_publish_delay_ms</span><span class="p">,</span> <span class="s1">&#39;batching_max_publish_delay_ms&#39;</span><span class="p">)</span>
</span><span id="Client-570"><a href="#Client-570"><span class="linenos">570</span></a> <span class="n">_check_type_or_none</span><span class="p">(</span><span class="nb">dict</span><span class="p">,</span> <span class="n">properties</span><span class="p">,</span> <span class="s1">&#39;properties&#39;</span><span class="p">)</span>
</span><span id="Client-571"><a href="#Client-571"><span class="linenos">571</span></a> <span class="n">_check_type</span><span class="p">(</span><span class="n">BatchingType</span><span class="p">,</span> <span class="n">batching_type</span><span class="p">,</span> <span class="s1">&#39;batching_type&#39;</span><span class="p">)</span>
</span><span id="Client-572"><a href="#Client-572"><span class="linenos">572</span></a> <span class="n">_check_type_or_none</span><span class="p">(</span><span class="nb">str</span><span class="p">,</span> <span class="n">encryption_key</span><span class="p">,</span> <span class="s1">&#39;encryption_key&#39;</span><span class="p">)</span>
</span><span id="Client-573"><a href="#Client-573"><span class="linenos">573</span></a> <span class="n">_check_type_or_none</span><span class="p">(</span><span class="n">CryptoKeyReader</span><span class="p">,</span> <span class="n">crypto_key_reader</span><span class="p">,</span> <span class="s1">&#39;crypto_key_reader&#39;</span><span class="p">)</span>
</span><span id="Client-574"><a href="#Client-574"><span class="linenos">574</span></a> <span class="n">_check_type</span><span class="p">(</span><span class="nb">bool</span><span class="p">,</span> <span class="n">lazy_start_partitioned_producers</span><span class="p">,</span> <span class="s1">&#39;lazy_start_partitioned_producers&#39;</span><span class="p">)</span>
</span><span id="Client-575"><a href="#Client-575"><span class="linenos">575</span></a>
</span><span id="Client-576"><a href="#Client-576"><span class="linenos">576</span></a> <span class="n">conf</span> <span class="o">=</span> <span class="n">_pulsar</span><span class="o">.</span><span class="n">ProducerConfiguration</span><span class="p">()</span>
</span><span id="Client-577"><a href="#Client-577"><span class="linenos">577</span></a> <span class="n">conf</span><span class="o">.</span><span class="n">send_timeout_millis</span><span class="p">(</span><span class="n">send_timeout_millis</span><span class="p">)</span>
</span><span id="Client-578"><a href="#Client-578"><span class="linenos">578</span></a> <span class="n">conf</span><span class="o">.</span><span class="n">compression_type</span><span class="p">(</span><span class="n">compression_type</span><span class="p">)</span>
</span><span id="Client-579"><a href="#Client-579"><span class="linenos">579</span></a> <span class="n">conf</span><span class="o">.</span><span class="n">max_pending_messages</span><span class="p">(</span><span class="n">max_pending_messages</span><span class="p">)</span>
</span><span id="Client-580"><a href="#Client-580"><span class="linenos">580</span></a> <span class="n">conf</span><span class="o">.</span><span class="n">max_pending_messages_across_partitions</span><span class="p">(</span><span class="n">max_pending_messages_across_partitions</span><span class="p">)</span>
</span><span id="Client-581"><a href="#Client-581"><span class="linenos">581</span></a> <span class="n">conf</span><span class="o">.</span><span class="n">block_if_queue_full</span><span class="p">(</span><span class="n">block_if_queue_full</span><span class="p">)</span>
</span><span id="Client-582"><a href="#Client-582"><span class="linenos">582</span></a> <span class="n">conf</span><span class="o">.</span><span class="n">batching_enabled</span><span class="p">(</span><span class="n">batching_enabled</span><span class="p">)</span>
</span><span id="Client-583"><a href="#Client-583"><span class="linenos">583</span></a> <span class="n">conf</span><span class="o">.</span><span class="n">batching_max_messages</span><span class="p">(</span><span class="n">batching_max_messages</span><span class="p">)</span>
</span><span id="Client-584"><a href="#Client-584"><span class="linenos">584</span></a> <span class="n">conf</span><span class="o">.</span><span class="n">batching_max_allowed_size_in_bytes</span><span class="p">(</span><span class="n">batching_max_allowed_size_in_bytes</span><span class="p">)</span>
</span><span id="Client-585"><a href="#Client-585"><span class="linenos">585</span></a> <span class="n">conf</span><span class="o">.</span><span class="n">batching_max_publish_delay_ms</span><span class="p">(</span><span class="n">batching_max_publish_delay_ms</span><span class="p">)</span>
</span><span id="Client-586"><a href="#Client-586"><span class="linenos">586</span></a> <span class="n">conf</span><span class="o">.</span><span class="n">partitions_routing_mode</span><span class="p">(</span><span class="n">message_routing_mode</span><span class="p">)</span>
</span><span id="Client-587"><a href="#Client-587"><span class="linenos">587</span></a> <span class="n">conf</span><span class="o">.</span><span class="n">batching_type</span><span class="p">(</span><span class="n">batching_type</span><span class="p">)</span>
</span><span id="Client-588"><a href="#Client-588"><span class="linenos">588</span></a> <span class="n">conf</span><span class="o">.</span><span class="n">lazy_start_partitioned_producers</span><span class="p">(</span><span class="n">lazy_start_partitioned_producers</span><span class="p">)</span>
</span><span id="Client-589"><a href="#Client-589"><span class="linenos">589</span></a> <span class="k">if</span> <span class="n">producer_name</span><span class="p">:</span>
</span><span id="Client-590"><a href="#Client-590"><span class="linenos">590</span></a> <span class="n">conf</span><span class="o">.</span><span class="n">producer_name</span><span class="p">(</span><span class="n">producer_name</span><span class="p">)</span>
</span><span id="Client-591"><a href="#Client-591"><span class="linenos">591</span></a> <span class="k">if</span> <span class="n">initial_sequence_id</span><span class="p">:</span>
</span><span id="Client-592"><a href="#Client-592"><span class="linenos">592</span></a> <span class="n">conf</span><span class="o">.</span><span class="n">initial_sequence_id</span><span class="p">(</span><span class="n">initial_sequence_id</span><span class="p">)</span>
</span><span id="Client-593"><a href="#Client-593"><span class="linenos">593</span></a> <span class="k">if</span> <span class="n">properties</span><span class="p">:</span>
</span><span id="Client-594"><a href="#Client-594"><span class="linenos">594</span></a> <span class="k">for</span> <span class="n">k</span><span class="p">,</span> <span class="n">v</span> <span class="ow">in</span> <span class="n">properties</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
</span><span id="Client-595"><a href="#Client-595"><span class="linenos">595</span></a> <span class="n">conf</span><span class="o">.</span><span class="n">property</span><span class="p">(</span><span class="n">k</span><span class="p">,</span> <span class="n">v</span><span class="p">)</span>
</span><span id="Client-596"><a href="#Client-596"><span class="linenos">596</span></a>
</span><span id="Client-597"><a href="#Client-597"><span class="linenos">597</span></a> <span class="n">conf</span><span class="o">.</span><span class="n">schema</span><span class="p">(</span><span class="n">schema</span><span class="o">.</span><span class="n">schema_info</span><span class="p">())</span>
</span><span id="Client-598"><a href="#Client-598"><span class="linenos">598</span></a> <span class="k">if</span> <span class="n">encryption_key</span><span class="p">:</span>
</span><span id="Client-599"><a href="#Client-599"><span class="linenos">599</span></a> <span class="n">conf</span><span class="o">.</span><span class="n">encryption_key</span><span class="p">(</span><span class="n">encryption_key</span><span class="p">)</span>
</span><span id="Client-600"><a href="#Client-600"><span class="linenos">600</span></a> <span class="k">if</span> <span class="n">crypto_key_reader</span><span class="p">:</span>
</span><span id="Client-601"><a href="#Client-601"><span class="linenos">601</span></a> <span class="n">conf</span><span class="o">.</span><span class="n">crypto_key_reader</span><span class="p">(</span><span class="n">crypto_key_reader</span><span class="o">.</span><span class="n">cryptoKeyReader</span><span class="p">)</span>
</span><span id="Client-602"><a href="#Client-602"><span class="linenos">602</span></a>
</span><span id="Client-603"><a href="#Client-603"><span class="linenos">603</span></a> <span class="n">p</span> <span class="o">=</span> <span class="n">Producer</span><span class="p">()</span>
</span><span id="Client-604"><a href="#Client-604"><span class="linenos">604</span></a> <span class="n">p</span><span class="o">.</span><span class="n">_producer</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_client</span><span class="o">.</span><span class="n">create_producer</span><span class="p">(</span><span class="n">topic</span><span class="p">,</span> <span class="n">conf</span><span class="p">)</span>
</span><span id="Client-605"><a href="#Client-605"><span class="linenos">605</span></a> <span class="n">p</span><span class="o">.</span><span class="n">_schema</span> <span class="o">=</span> <span class="n">schema</span>
</span><span id="Client-606"><a href="#Client-606"><span class="linenos">606</span></a> <span class="n">p</span><span class="o">.</span><span class="n">_client</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_client</span>
</span><span id="Client-607"><a href="#Client-607"><span class="linenos">607</span></a> <span class="k">return</span> <span class="n">p</span>
</span><span id="Client-608"><a href="#Client-608"><span class="linenos">608</span></a>
</span><span id="Client-609"><a href="#Client-609"><span class="linenos">609</span></a> <span class="k">def</span> <span class="nf">subscribe</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">topic</span><span class="p">,</span> <span class="n">subscription_name</span><span class="p">,</span>
</span><span id="Client-610"><a href="#Client-610"><span class="linenos">610</span></a> <span class="n">consumer_type</span><span class="o">=</span><span class="n">ConsumerType</span><span class="o">.</span><span class="n">Exclusive</span><span class="p">,</span>
</span><span id="Client-611"><a href="#Client-611"><span class="linenos">611</span></a> <span class="n">schema</span><span class="o">=</span><span class="n">schema</span><span class="o">.</span><span class="n">BytesSchema</span><span class="p">(),</span>
</span><span id="Client-612"><a href="#Client-612"><span class="linenos">612</span></a> <span class="n">message_listener</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
</span><span id="Client-613"><a href="#Client-613"><span class="linenos">613</span></a> <span class="n">receiver_queue_size</span><span class="o">=</span><span class="mi">1000</span><span class="p">,</span>
</span><span id="Client-614"><a href="#Client-614"><span class="linenos">614</span></a> <span class="n">max_total_receiver_queue_size_across_partitions</span><span class="o">=</span><span class="mi">50000</span><span class="p">,</span>
</span><span id="Client-615"><a href="#Client-615"><span class="linenos">615</span></a> <span class="n">consumer_name</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
</span><span id="Client-616"><a href="#Client-616"><span class="linenos">616</span></a> <span class="n">unacked_messages_timeout_ms</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
</span><span id="Client-617"><a href="#Client-617"><span class="linenos">617</span></a> <span class="n">broker_consumer_stats_cache_time_ms</span><span class="o">=</span><span class="mi">30000</span><span class="p">,</span>
</span><span id="Client-618"><a href="#Client-618"><span class="linenos">618</span></a> <span class="n">negative_ack_redelivery_delay_ms</span><span class="o">=</span><span class="mi">60000</span><span class="p">,</span>
</span><span id="Client-619"><a href="#Client-619"><span class="linenos">619</span></a> <span class="n">is_read_compacted</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
</span><span id="Client-620"><a href="#Client-620"><span class="linenos">620</span></a> <span class="n">properties</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
</span><span id="Client-621"><a href="#Client-621"><span class="linenos">621</span></a> <span class="n">pattern_auto_discovery_period</span><span class="o">=</span><span class="mi">60</span><span class="p">,</span>
</span><span id="Client-622"><a href="#Client-622"><span class="linenos">622</span></a> <span class="n">initial_position</span><span class="o">=</span><span class="n">InitialPosition</span><span class="o">.</span><span class="n">Latest</span><span class="p">,</span>
</span><span id="Client-623"><a href="#Client-623"><span class="linenos">623</span></a> <span class="n">crypto_key_reader</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
</span><span id="Client-624"><a href="#Client-624"><span class="linenos">624</span></a> <span class="n">replicate_subscription_state_enabled</span><span class="o">=</span><span class="kc">False</span>
</span><span id="Client-625"><a href="#Client-625"><span class="linenos">625</span></a> <span class="p">):</span>
</span><span id="Client-626"><a href="#Client-626"><span class="linenos">626</span></a> <span class="sd">&quot;&quot;&quot;</span>
</span><span id="Client-627"><a href="#Client-627"><span class="linenos">627</span></a><span class="sd"> Subscribe to the given topic and subscription combination.</span>
</span><span id="Client-628"><a href="#Client-628"><span class="linenos">628</span></a>
</span><span id="Client-629"><a href="#Client-629"><span class="linenos">629</span></a><span class="sd"> **Args**</span>
</span><span id="Client-630"><a href="#Client-630"><span class="linenos">630</span></a>
</span><span id="Client-631"><a href="#Client-631"><span class="linenos">631</span></a><span class="sd"> * `topic`: The name of the topic, list of topics or regex pattern.</span>
</span><span id="Client-632"><a href="#Client-632"><span class="linenos">632</span></a><span class="sd"> This method will accept these forms:</span>
</span><span id="Client-633"><a href="#Client-633"><span class="linenos">633</span></a><span class="sd"> - `topic=&#39;my-topic&#39;`</span>
</span><span id="Client-634"><a href="#Client-634"><span class="linenos">634</span></a><span class="sd"> - `topic=[&#39;topic-1&#39;, &#39;topic-2&#39;, &#39;topic-3&#39;]`</span>
</span><span id="Client-635"><a href="#Client-635"><span class="linenos">635</span></a><span class="sd"> - `topic=re.compile(&#39;persistent://public/default/topic-*&#39;)`</span>
</span><span id="Client-636"><a href="#Client-636"><span class="linenos">636</span></a><span class="sd"> * `subscription`: The name of the subscription.</span>
</span><span id="Client-637"><a href="#Client-637"><span class="linenos">637</span></a>
</span><span id="Client-638"><a href="#Client-638"><span class="linenos">638</span></a><span class="sd"> **Options**</span>
</span><span id="Client-639"><a href="#Client-639"><span class="linenos">639</span></a>
</span><span id="Client-640"><a href="#Client-640"><span class="linenos">640</span></a><span class="sd"> * `consumer_type`:</span>
</span><span id="Client-641"><a href="#Client-641"><span class="linenos">641</span></a><span class="sd"> Select the subscription type to be used when subscribing to the topic.</span>
</span><span id="Client-642"><a href="#Client-642"><span class="linenos">642</span></a><span class="sd"> * `schema`:</span>
</span><span id="Client-643"><a href="#Client-643"><span class="linenos">643</span></a><span class="sd"> Define the schema of the data that will be received by this consumer.</span>
</span><span id="Client-644"><a href="#Client-644"><span class="linenos">644</span></a><span class="sd"> * `message_listener`:</span>
</span><span id="Client-645"><a href="#Client-645"><span class="linenos">645</span></a><span class="sd"> Sets a message listener for the consumer. When the listener is set,</span>
</span><span id="Client-646"><a href="#Client-646"><span class="linenos">646</span></a><span class="sd"> the application will receive messages through it. Calls to</span>
</span><span id="Client-647"><a href="#Client-647"><span class="linenos">647</span></a><span class="sd"> `consumer.receive()` will not be allowed. The listener function needs</span>
</span><span id="Client-648"><a href="#Client-648"><span class="linenos">648</span></a><span class="sd"> to accept (consumer, message), for example:</span>
</span><span id="Client-649"><a href="#Client-649"><span class="linenos">649</span></a>
</span><span id="Client-650"><a href="#Client-650"><span class="linenos">650</span></a><span class="sd"> #!python</span>
</span><span id="Client-651"><a href="#Client-651"><span class="linenos">651</span></a><span class="sd"> def my_listener(consumer, message):</span>
</span><span id="Client-652"><a href="#Client-652"><span class="linenos">652</span></a><span class="sd"> # process message</span>
</span><span id="Client-653"><a href="#Client-653"><span class="linenos">653</span></a><span class="sd"> consumer.acknowledge(message)</span>
</span><span id="Client-654"><a href="#Client-654"><span class="linenos">654</span></a>
</span><span id="Client-655"><a href="#Client-655"><span class="linenos">655</span></a><span class="sd"> * `receiver_queue_size`:</span>
</span><span id="Client-656"><a href="#Client-656"><span class="linenos">656</span></a><span class="sd"> Sets the size of the consumer receive queue. The consumer receive</span>
</span><span id="Client-657"><a href="#Client-657"><span class="linenos">657</span></a><span class="sd"> queue controls how many messages can be accumulated by the consumer</span>
</span><span id="Client-658"><a href="#Client-658"><span class="linenos">658</span></a><span class="sd"> before the application calls `receive()`. Using a higher value could</span>
</span><span id="Client-659"><a href="#Client-659"><span class="linenos">659</span></a><span class="sd"> potentially increase the consumer throughput at the expense of higher</span>
</span><span id="Client-660"><a href="#Client-660"><span class="linenos">660</span></a><span class="sd"> memory utilization. Setting the consumer queue size to zero decreases</span>
</span><span id="Client-661"><a href="#Client-661"><span class="linenos">661</span></a><span class="sd"> the throughput of the consumer by disabling pre-fetching of messages.</span>
</span><span id="Client-662"><a href="#Client-662"><span class="linenos">662</span></a><span class="sd"> This approach improves the message distribution on shared subscription</span>
</span><span id="Client-663"><a href="#Client-663"><span class="linenos">663</span></a><span class="sd"> by pushing messages only to those consumers that are ready to process</span>
</span><span id="Client-664"><a href="#Client-664"><span class="linenos">664</span></a><span class="sd"> them. Neither receive with timeout nor partitioned topics can be used</span>
</span><span id="Client-665"><a href="#Client-665"><span class="linenos">665</span></a><span class="sd"> if the consumer queue size is zero. The `receive()` function call</span>
</span><span id="Client-666"><a href="#Client-666"><span class="linenos">666</span></a><span class="sd"> should not be interrupted when the consumer queue size is zero. The</span>
</span><span id="Client-667"><a href="#Client-667"><span class="linenos">667</span></a><span class="sd"> default value is 1000 messages and should work well for most use</span>
</span><span id="Client-668"><a href="#Client-668"><span class="linenos">668</span></a><span class="sd"> cases.</span>
</span><span id="Client-669"><a href="#Client-669"><span class="linenos">669</span></a><span class="sd"> * `max_total_receiver_queue_size_across_partitions`</span>
</span><span id="Client-670"><a href="#Client-670"><span class="linenos">670</span></a><span class="sd"> Set the max total receiver queue size across partitions.</span>
</span><span id="Client-671"><a href="#Client-671"><span class="linenos">671</span></a><span class="sd"> This setting will be used to reduce the receiver queue size for individual partitions</span>
</span><span id="Client-672"><a href="#Client-672"><span class="linenos">672</span></a><span class="sd"> * `consumer_name`:</span>
</span><span id="Client-673"><a href="#Client-673"><span class="linenos">673</span></a><span class="sd"> Sets the consumer name.</span>
</span><span id="Client-674"><a href="#Client-674"><span class="linenos">674</span></a><span class="sd"> * `unacked_messages_timeout_ms`:</span>
</span><span id="Client-675"><a href="#Client-675"><span class="linenos">675</span></a><span class="sd"> Sets the timeout in milliseconds for unacknowledged messages. The</span>
</span><span id="Client-676"><a href="#Client-676"><span class="linenos">676</span></a><span class="sd"> timeout needs to be greater than 10 seconds. An exception is thrown if</span>
</span><span id="Client-677"><a href="#Client-677"><span class="linenos">677</span></a><span class="sd"> the given value is less than 10 seconds. If a successful</span>
</span><span id="Client-678"><a href="#Client-678"><span class="linenos">678</span></a><span class="sd"> acknowledgement is not sent within the timeout, all the unacknowledged</span>
</span><span id="Client-679"><a href="#Client-679"><span class="linenos">679</span></a><span class="sd"> messages are redelivered.</span>
</span><span id="Client-680"><a href="#Client-680"><span class="linenos">680</span></a><span class="sd"> * `negative_ack_redelivery_delay_ms`:</span>
</span><span id="Client-681"><a href="#Client-681"><span class="linenos">681</span></a><span class="sd"> The delay after which to redeliver the messages that failed to be</span>
</span><span id="Client-682"><a href="#Client-682"><span class="linenos">682</span></a><span class="sd"> processed (with the `consumer.negative_acknowledge()`)</span>
</span><span id="Client-683"><a href="#Client-683"><span class="linenos">683</span></a><span class="sd"> * `broker_consumer_stats_cache_time_ms`:</span>
</span><span id="Client-684"><a href="#Client-684"><span class="linenos">684</span></a><span class="sd"> Sets the time duration for which the broker-side consumer stats will</span>
</span><span id="Client-685"><a href="#Client-685"><span class="linenos">685</span></a><span class="sd"> be cached in the client.</span>
</span><span id="Client-686"><a href="#Client-686"><span class="linenos">686</span></a><span class="sd"> * `is_read_compacted`:</span>
</span><span id="Client-687"><a href="#Client-687"><span class="linenos">687</span></a><span class="sd"> Selects whether to read the compacted version of the topic</span>
</span><span id="Client-688"><a href="#Client-688"><span class="linenos">688</span></a><span class="sd"> * `properties`:</span>
</span><span id="Client-689"><a href="#Client-689"><span class="linenos">689</span></a><span class="sd"> Sets the properties for the consumer. The properties associated with a consumer</span>
</span><span id="Client-690"><a href="#Client-690"><span class="linenos">690</span></a><span class="sd"> can be used for identify a consumer at broker side.</span>
</span><span id="Client-691"><a href="#Client-691"><span class="linenos">691</span></a><span class="sd"> * `pattern_auto_discovery_period`:</span>
</span><span id="Client-692"><a href="#Client-692"><span class="linenos">692</span></a><span class="sd"> Periods of seconds for consumer to auto discover match topics.</span>
</span><span id="Client-693"><a href="#Client-693"><span class="linenos">693</span></a><span class="sd"> * `initial_position`:</span>
</span><span id="Client-694"><a href="#Client-694"><span class="linenos">694</span></a><span class="sd"> Set the initial position of a consumer when subscribing to the topic.</span>
</span><span id="Client-695"><a href="#Client-695"><span class="linenos">695</span></a><span class="sd"> It could be either: `InitialPosition.Earliest` or `InitialPosition.Latest`.</span>
</span><span id="Client-696"><a href="#Client-696"><span class="linenos">696</span></a><span class="sd"> Default: `Latest`.</span>
</span><span id="Client-697"><a href="#Client-697"><span class="linenos">697</span></a><span class="sd"> * crypto_key_reader:</span>
</span><span id="Client-698"><a href="#Client-698"><span class="linenos">698</span></a><span class="sd"> Symmetric encryption class implementation, configuring public key encryption messages for the producer</span>
</span><span id="Client-699"><a href="#Client-699"><span class="linenos">699</span></a><span class="sd"> and private key decryption messages for the consumer</span>
</span><span id="Client-700"><a href="#Client-700"><span class="linenos">700</span></a><span class="sd"> * replicate_subscription_state_enabled:</span>
</span><span id="Client-701"><a href="#Client-701"><span class="linenos">701</span></a><span class="sd"> Set whether the subscription status should be replicated.</span>
</span><span id="Client-702"><a href="#Client-702"><span class="linenos">702</span></a><span class="sd"> Default: `False`.</span>
</span><span id="Client-703"><a href="#Client-703"><span class="linenos">703</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="Client-704"><a href="#Client-704"><span class="linenos">704</span></a> <span class="n">_check_type</span><span class="p">(</span><span class="nb">str</span><span class="p">,</span> <span class="n">subscription_name</span><span class="p">,</span> <span class="s1">&#39;subscription_name&#39;</span><span class="p">)</span>
</span><span id="Client-705"><a href="#Client-705"><span class="linenos">705</span></a> <span class="n">_check_type</span><span class="p">(</span><span class="n">ConsumerType</span><span class="p">,</span> <span class="n">consumer_type</span><span class="p">,</span> <span class="s1">&#39;consumer_type&#39;</span><span class="p">)</span>
</span><span id="Client-706"><a href="#Client-706"><span class="linenos">706</span></a> <span class="n">_check_type</span><span class="p">(</span><span class="n">_schema</span><span class="o">.</span><span class="n">Schema</span><span class="p">,</span> <span class="n">schema</span><span class="p">,</span> <span class="s1">&#39;schema&#39;</span><span class="p">)</span>
</span><span id="Client-707"><a href="#Client-707"><span class="linenos">707</span></a> <span class="n">_check_type</span><span class="p">(</span><span class="nb">int</span><span class="p">,</span> <span class="n">receiver_queue_size</span><span class="p">,</span> <span class="s1">&#39;receiver_queue_size&#39;</span><span class="p">)</span>
</span><span id="Client-708"><a href="#Client-708"><span class="linenos">708</span></a> <span class="n">_check_type</span><span class="p">(</span><span class="nb">int</span><span class="p">,</span> <span class="n">max_total_receiver_queue_size_across_partitions</span><span class="p">,</span>
</span><span id="Client-709"><a href="#Client-709"><span class="linenos">709</span></a> <span class="s1">&#39;max_total_receiver_queue_size_across_partitions&#39;</span><span class="p">)</span>
</span><span id="Client-710"><a href="#Client-710"><span class="linenos">710</span></a> <span class="n">_check_type_or_none</span><span class="p">(</span><span class="nb">str</span><span class="p">,</span> <span class="n">consumer_name</span><span class="p">,</span> <span class="s1">&#39;consumer_name&#39;</span><span class="p">)</span>
</span><span id="Client-711"><a href="#Client-711"><span class="linenos">711</span></a> <span class="n">_check_type_or_none</span><span class="p">(</span><span class="nb">int</span><span class="p">,</span> <span class="n">unacked_messages_timeout_ms</span><span class="p">,</span> <span class="s1">&#39;unacked_messages_timeout_ms&#39;</span><span class="p">)</span>
</span><span id="Client-712"><a href="#Client-712"><span class="linenos">712</span></a> <span class="n">_check_type</span><span class="p">(</span><span class="nb">int</span><span class="p">,</span> <span class="n">broker_consumer_stats_cache_time_ms</span><span class="p">,</span> <span class="s1">&#39;broker_consumer_stats_cache_time_ms&#39;</span><span class="p">)</span>
</span><span id="Client-713"><a href="#Client-713"><span class="linenos">713</span></a> <span class="n">_check_type</span><span class="p">(</span><span class="nb">int</span><span class="p">,</span> <span class="n">negative_ack_redelivery_delay_ms</span><span class="p">,</span> <span class="s1">&#39;negative_ack_redelivery_delay_ms&#39;</span><span class="p">)</span>
</span><span id="Client-714"><a href="#Client-714"><span class="linenos">714</span></a> <span class="n">_check_type</span><span class="p">(</span><span class="nb">int</span><span class="p">,</span> <span class="n">pattern_auto_discovery_period</span><span class="p">,</span> <span class="s1">&#39;pattern_auto_discovery_period&#39;</span><span class="p">)</span>
</span><span id="Client-715"><a href="#Client-715"><span class="linenos">715</span></a> <span class="n">_check_type</span><span class="p">(</span><span class="nb">bool</span><span class="p">,</span> <span class="n">is_read_compacted</span><span class="p">,</span> <span class="s1">&#39;is_read_compacted&#39;</span><span class="p">)</span>
</span><span id="Client-716"><a href="#Client-716"><span class="linenos">716</span></a> <span class="n">_check_type_or_none</span><span class="p">(</span><span class="nb">dict</span><span class="p">,</span> <span class="n">properties</span><span class="p">,</span> <span class="s1">&#39;properties&#39;</span><span class="p">)</span>
</span><span id="Client-717"><a href="#Client-717"><span class="linenos">717</span></a> <span class="n">_check_type</span><span class="p">(</span><span class="n">InitialPosition</span><span class="p">,</span> <span class="n">initial_position</span><span class="p">,</span> <span class="s1">&#39;initial_position&#39;</span><span class="p">)</span>
</span><span id="Client-718"><a href="#Client-718"><span class="linenos">718</span></a> <span class="n">_check_type_or_none</span><span class="p">(</span><span class="n">CryptoKeyReader</span><span class="p">,</span> <span class="n">crypto_key_reader</span><span class="p">,</span> <span class="s1">&#39;crypto_key_reader&#39;</span><span class="p">)</span>
</span><span id="Client-719"><a href="#Client-719"><span class="linenos">719</span></a>
</span><span id="Client-720"><a href="#Client-720"><span class="linenos">720</span></a> <span class="n">conf</span> <span class="o">=</span> <span class="n">_pulsar</span><span class="o">.</span><span class="n">ConsumerConfiguration</span><span class="p">()</span>
</span><span id="Client-721"><a href="#Client-721"><span class="linenos">721</span></a> <span class="n">conf</span><span class="o">.</span><span class="n">consumer_type</span><span class="p">(</span><span class="n">consumer_type</span><span class="p">)</span>
</span><span id="Client-722"><a href="#Client-722"><span class="linenos">722</span></a> <span class="n">conf</span><span class="o">.</span><span class="n">read_compacted</span><span class="p">(</span><span class="n">is_read_compacted</span><span class="p">)</span>
</span><span id="Client-723"><a href="#Client-723"><span class="linenos">723</span></a> <span class="k">if</span> <span class="n">message_listener</span><span class="p">:</span>
</span><span id="Client-724"><a href="#Client-724"><span class="linenos">724</span></a> <span class="n">conf</span><span class="o">.</span><span class="n">message_listener</span><span class="p">(</span><span class="n">_listener_wrapper</span><span class="p">(</span><span class="n">message_listener</span><span class="p">,</span> <span class="n">schema</span><span class="p">))</span>
</span><span id="Client-725"><a href="#Client-725"><span class="linenos">725</span></a> <span class="n">conf</span><span class="o">.</span><span class="n">receiver_queue_size</span><span class="p">(</span><span class="n">receiver_queue_size</span><span class="p">)</span>
</span><span id="Client-726"><a href="#Client-726"><span class="linenos">726</span></a> <span class="n">conf</span><span class="o">.</span><span class="n">max_total_receiver_queue_size_across_partitions</span><span class="p">(</span><span class="n">max_total_receiver_queue_size_across_partitions</span><span class="p">)</span>
</span><span id="Client-727"><a href="#Client-727"><span class="linenos">727</span></a> <span class="k">if</span> <span class="n">consumer_name</span><span class="p">:</span>
</span><span id="Client-728"><a href="#Client-728"><span class="linenos">728</span></a> <span class="n">conf</span><span class="o">.</span><span class="n">consumer_name</span><span class="p">(</span><span class="n">consumer_name</span><span class="p">)</span>
</span><span id="Client-729"><a href="#Client-729"><span class="linenos">729</span></a> <span class="k">if</span> <span class="n">unacked_messages_timeout_ms</span><span class="p">:</span>
</span><span id="Client-730"><a href="#Client-730"><span class="linenos">730</span></a> <span class="n">conf</span><span class="o">.</span><span class="n">unacked_messages_timeout_ms</span><span class="p">(</span><span class="n">unacked_messages_timeout_ms</span><span class="p">)</span>
</span><span id="Client-731"><a href="#Client-731"><span class="linenos">731</span></a>
</span><span id="Client-732"><a href="#Client-732"><span class="linenos">732</span></a> <span class="n">conf</span><span class="o">.</span><span class="n">negative_ack_redelivery_delay_ms</span><span class="p">(</span><span class="n">negative_ack_redelivery_delay_ms</span><span class="p">)</span>
</span><span id="Client-733"><a href="#Client-733"><span class="linenos">733</span></a> <span class="n">conf</span><span class="o">.</span><span class="n">broker_consumer_stats_cache_time_ms</span><span class="p">(</span><span class="n">broker_consumer_stats_cache_time_ms</span><span class="p">)</span>
</span><span id="Client-734"><a href="#Client-734"><span class="linenos">734</span></a> <span class="k">if</span> <span class="n">properties</span><span class="p">:</span>
</span><span id="Client-735"><a href="#Client-735"><span class="linenos">735</span></a> <span class="k">for</span> <span class="n">k</span><span class="p">,</span> <span class="n">v</span> <span class="ow">in</span> <span class="n">properties</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
</span><span id="Client-736"><a href="#Client-736"><span class="linenos">736</span></a> <span class="n">conf</span><span class="o">.</span><span class="n">property</span><span class="p">(</span><span class="n">k</span><span class="p">,</span> <span class="n">v</span><span class="p">)</span>
</span><span id="Client-737"><a href="#Client-737"><span class="linenos">737</span></a> <span class="n">conf</span><span class="o">.</span><span class="n">subscription_initial_position</span><span class="p">(</span><span class="n">initial_position</span><span class="p">)</span>
</span><span id="Client-738"><a href="#Client-738"><span class="linenos">738</span></a>
</span><span id="Client-739"><a href="#Client-739"><span class="linenos">739</span></a> <span class="n">conf</span><span class="o">.</span><span class="n">schema</span><span class="p">(</span><span class="n">schema</span><span class="o">.</span><span class="n">schema_info</span><span class="p">())</span>
</span><span id="Client-740"><a href="#Client-740"><span class="linenos">740</span></a>
</span><span id="Client-741"><a href="#Client-741"><span class="linenos">741</span></a> <span class="k">if</span> <span class="n">crypto_key_reader</span><span class="p">:</span>
</span><span id="Client-742"><a href="#Client-742"><span class="linenos">742</span></a> <span class="n">conf</span><span class="o">.</span><span class="n">crypto_key_reader</span><span class="p">(</span><span class="n">crypto_key_reader</span><span class="o">.</span><span class="n">cryptoKeyReader</span><span class="p">)</span>
</span><span id="Client-743"><a href="#Client-743"><span class="linenos">743</span></a>
</span><span id="Client-744"><a href="#Client-744"><span class="linenos">744</span></a> <span class="n">conf</span><span class="o">.</span><span class="n">replicate_subscription_state_enabled</span><span class="p">(</span><span class="n">replicate_subscription_state_enabled</span><span class="p">)</span>
</span><span id="Client-745"><a href="#Client-745"><span class="linenos">745</span></a>
</span><span id="Client-746"><a href="#Client-746"><span class="linenos">746</span></a> <span class="n">c</span> <span class="o">=</span> <span class="n">Consumer</span><span class="p">()</span>
</span><span id="Client-747"><a href="#Client-747"><span class="linenos">747</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">topic</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span>
</span><span id="Client-748"><a href="#Client-748"><span class="linenos">748</span></a> <span class="c1"># Single topic</span>
</span><span id="Client-749"><a href="#Client-749"><span class="linenos">749</span></a> <span class="n">c</span><span class="o">.</span><span class="n">_consumer</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_client</span><span class="o">.</span><span class="n">subscribe</span><span class="p">(</span><span class="n">topic</span><span class="p">,</span> <span class="n">subscription_name</span><span class="p">,</span> <span class="n">conf</span><span class="p">)</span>
</span><span id="Client-750"><a href="#Client-750"><span class="linenos">750</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">topic</span><span class="p">,</span> <span class="nb">list</span><span class="p">):</span>
</span><span id="Client-751"><a href="#Client-751"><span class="linenos">751</span></a> <span class="c1"># List of topics</span>
</span><span id="Client-752"><a href="#Client-752"><span class="linenos">752</span></a> <span class="n">c</span><span class="o">.</span><span class="n">_consumer</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_client</span><span class="o">.</span><span class="n">subscribe_topics</span><span class="p">(</span><span class="n">topic</span><span class="p">,</span> <span class="n">subscription_name</span><span class="p">,</span> <span class="n">conf</span><span class="p">)</span>
</span><span id="Client-753"><a href="#Client-753"><span class="linenos">753</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">topic</span><span class="p">,</span> <span class="n">_retype</span><span class="p">):</span>
</span><span id="Client-754"><a href="#Client-754"><span class="linenos">754</span></a> <span class="c1"># Regex pattern</span>
</span><span id="Client-755"><a href="#Client-755"><span class="linenos">755</span></a> <span class="n">c</span><span class="o">.</span><span class="n">_consumer</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_client</span><span class="o">.</span><span class="n">subscribe_pattern</span><span class="p">(</span><span class="n">topic</span><span class="o">.</span><span class="n">pattern</span><span class="p">,</span> <span class="n">subscription_name</span><span class="p">,</span> <span class="n">conf</span><span class="p">)</span>
</span><span id="Client-756"><a href="#Client-756"><span class="linenos">756</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="Client-757"><a href="#Client-757"><span class="linenos">757</span></a> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">&quot;Argument &#39;topic&#39; is expected to be of a type between (str, list, re.pattern)&quot;</span><span class="p">)</span>
</span><span id="Client-758"><a href="#Client-758"><span class="linenos">758</span></a>
</span><span id="Client-759"><a href="#Client-759"><span class="linenos">759</span></a> <span class="n">c</span><span class="o">.</span><span class="n">_client</span> <span class="o">=</span> <span class="bp">self</span>
</span><span id="Client-760"><a href="#Client-760"><span class="linenos">760</span></a> <span class="n">c</span><span class="o">.</span><span class="n">_schema</span> <span class="o">=</span> <span class="n">schema</span>
</span><span id="Client-761"><a href="#Client-761"><span class="linenos">761</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_consumers</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">c</span><span class="p">)</span>
</span><span id="Client-762"><a href="#Client-762"><span class="linenos">762</span></a> <span class="k">return</span> <span class="n">c</span>
</span><span id="Client-763"><a href="#Client-763"><span class="linenos">763</span></a>
</span><span id="Client-764"><a href="#Client-764"><span class="linenos">764</span></a> <span class="k">def</span> <span class="nf">create_reader</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">topic</span><span class="p">,</span> <span class="n">start_message_id</span><span class="p">,</span>
</span><span id="Client-765"><a href="#Client-765"><span class="linenos">765</span></a> <span class="n">schema</span><span class="o">=</span><span class="n">schema</span><span class="o">.</span><span class="n">BytesSchema</span><span class="p">(),</span>
</span><span id="Client-766"><a href="#Client-766"><span class="linenos">766</span></a> <span class="n">reader_listener</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
</span><span id="Client-767"><a href="#Client-767"><span class="linenos">767</span></a> <span class="n">receiver_queue_size</span><span class="o">=</span><span class="mi">1000</span><span class="p">,</span>
</span><span id="Client-768"><a href="#Client-768"><span class="linenos">768</span></a> <span class="n">reader_name</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
</span><span id="Client-769"><a href="#Client-769"><span class="linenos">769</span></a> <span class="n">subscription_role_prefix</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
</span><span id="Client-770"><a href="#Client-770"><span class="linenos">770</span></a> <span class="n">is_read_compacted</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
</span><span id="Client-771"><a href="#Client-771"><span class="linenos">771</span></a> <span class="n">crypto_key_reader</span><span class="o">=</span><span class="kc">None</span>
</span><span id="Client-772"><a href="#Client-772"><span class="linenos">772</span></a> <span class="p">):</span>
</span><span id="Client-773"><a href="#Client-773"><span class="linenos">773</span></a> <span class="sd">&quot;&quot;&quot;</span>
</span><span id="Client-774"><a href="#Client-774"><span class="linenos">774</span></a><span class="sd"> Create a reader on a particular topic</span>
</span><span id="Client-775"><a href="#Client-775"><span class="linenos">775</span></a>
</span><span id="Client-776"><a href="#Client-776"><span class="linenos">776</span></a><span class="sd"> **Args**</span>
</span><span id="Client-777"><a href="#Client-777"><span class="linenos">777</span></a>
</span><span id="Client-778"><a href="#Client-778"><span class="linenos">778</span></a><span class="sd"> * `topic`: The name of the topic.</span>
</span><span id="Client-779"><a href="#Client-779"><span class="linenos">779</span></a><span class="sd"> * `start_message_id`: The initial reader positioning is done by specifying a message id.</span>
</span><span id="Client-780"><a href="#Client-780"><span class="linenos">780</span></a><span class="sd"> The options are:</span>
</span><span id="Client-781"><a href="#Client-781"><span class="linenos">781</span></a><span class="sd"> * `MessageId.earliest`: Start reading from the earliest message available in the topic</span>
</span><span id="Client-782"><a href="#Client-782"><span class="linenos">782</span></a><span class="sd"> * `MessageId.latest`: Start reading from the end topic, only getting messages published</span>
</span><span id="Client-783"><a href="#Client-783"><span class="linenos">783</span></a><span class="sd"> after the reader was created</span>
</span><span id="Client-784"><a href="#Client-784"><span class="linenos">784</span></a><span class="sd"> * `MessageId`: When passing a particular message id, the reader will position itself on</span>
</span><span id="Client-785"><a href="#Client-785"><span class="linenos">785</span></a><span class="sd"> that specific position. The first message to be read will be the message next to the</span>
</span><span id="Client-786"><a href="#Client-786"><span class="linenos">786</span></a><span class="sd"> specified messageId. Message id can be serialized into a string and deserialized</span>
</span><span id="Client-787"><a href="#Client-787"><span class="linenos">787</span></a><span class="sd"> back into a `MessageId` object:</span>
</span><span id="Client-788"><a href="#Client-788"><span class="linenos">788</span></a>
</span><span id="Client-789"><a href="#Client-789"><span class="linenos">789</span></a><span class="sd"> # Serialize to string</span>
</span><span id="Client-790"><a href="#Client-790"><span class="linenos">790</span></a><span class="sd"> s = msg.message_id().serialize()</span>
</span><span id="Client-791"><a href="#Client-791"><span class="linenos">791</span></a>
</span><span id="Client-792"><a href="#Client-792"><span class="linenos">792</span></a><span class="sd"> # Deserialize from string</span>
</span><span id="Client-793"><a href="#Client-793"><span class="linenos">793</span></a><span class="sd"> msg_id = MessageId.deserialize(s)</span>
</span><span id="Client-794"><a href="#Client-794"><span class="linenos">794</span></a>
</span><span id="Client-795"><a href="#Client-795"><span class="linenos">795</span></a><span class="sd"> **Options**</span>
</span><span id="Client-796"><a href="#Client-796"><span class="linenos">796</span></a>
</span><span id="Client-797"><a href="#Client-797"><span class="linenos">797</span></a><span class="sd"> * `schema`:</span>
</span><span id="Client-798"><a href="#Client-798"><span class="linenos">798</span></a><span class="sd"> Define the schema of the data that will be received by this reader.</span>
</span><span id="Client-799"><a href="#Client-799"><span class="linenos">799</span></a><span class="sd"> * `reader_listener`:</span>
</span><span id="Client-800"><a href="#Client-800"><span class="linenos">800</span></a><span class="sd"> Sets a message listener for the reader. When the listener is set,</span>
</span><span id="Client-801"><a href="#Client-801"><span class="linenos">801</span></a><span class="sd"> the application will receive messages through it. Calls to</span>
</span><span id="Client-802"><a href="#Client-802"><span class="linenos">802</span></a><span class="sd"> `reader.read_next()` will not be allowed. The listener function needs</span>
</span><span id="Client-803"><a href="#Client-803"><span class="linenos">803</span></a><span class="sd"> to accept (reader, message), for example:</span>
</span><span id="Client-804"><a href="#Client-804"><span class="linenos">804</span></a>
</span><span id="Client-805"><a href="#Client-805"><span class="linenos">805</span></a><span class="sd"> def my_listener(reader, message):</span>
</span><span id="Client-806"><a href="#Client-806"><span class="linenos">806</span></a><span class="sd"> # process message</span>
</span><span id="Client-807"><a href="#Client-807"><span class="linenos">807</span></a><span class="sd"> pass</span>
</span><span id="Client-808"><a href="#Client-808"><span class="linenos">808</span></a>
</span><span id="Client-809"><a href="#Client-809"><span class="linenos">809</span></a><span class="sd"> * `receiver_queue_size`:</span>
</span><span id="Client-810"><a href="#Client-810"><span class="linenos">810</span></a><span class="sd"> Sets the size of the reader receive queue. The reader receive</span>
</span><span id="Client-811"><a href="#Client-811"><span class="linenos">811</span></a><span class="sd"> queue controls how many messages can be accumulated by the reader</span>
</span><span id="Client-812"><a href="#Client-812"><span class="linenos">812</span></a><span class="sd"> before the application calls `read_next()`. Using a higher value could</span>
</span><span id="Client-813"><a href="#Client-813"><span class="linenos">813</span></a><span class="sd"> potentially increase the reader throughput at the expense of higher</span>
</span><span id="Client-814"><a href="#Client-814"><span class="linenos">814</span></a><span class="sd"> memory utilization.</span>
</span><span id="Client-815"><a href="#Client-815"><span class="linenos">815</span></a><span class="sd"> * `reader_name`:</span>
</span><span id="Client-816"><a href="#Client-816"><span class="linenos">816</span></a><span class="sd"> Sets the reader name.</span>
</span><span id="Client-817"><a href="#Client-817"><span class="linenos">817</span></a><span class="sd"> * `subscription_role_prefix`:</span>
</span><span id="Client-818"><a href="#Client-818"><span class="linenos">818</span></a><span class="sd"> Sets the subscription role prefix.</span>
</span><span id="Client-819"><a href="#Client-819"><span class="linenos">819</span></a><span class="sd"> * `is_read_compacted`:</span>
</span><span id="Client-820"><a href="#Client-820"><span class="linenos">820</span></a><span class="sd"> Selects whether to read the compacted version of the topic</span>
</span><span id="Client-821"><a href="#Client-821"><span class="linenos">821</span></a><span class="sd"> * crypto_key_reader:</span>
</span><span id="Client-822"><a href="#Client-822"><span class="linenos">822</span></a><span class="sd"> Symmetric encryption class implementation, configuring public key encryption messages for the producer</span>
</span><span id="Client-823"><a href="#Client-823"><span class="linenos">823</span></a><span class="sd"> and private key decryption messages for the consumer</span>
</span><span id="Client-824"><a href="#Client-824"><span class="linenos">824</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="Client-825"><a href="#Client-825"><span class="linenos">825</span></a> <span class="n">_check_type</span><span class="p">(</span><span class="nb">str</span><span class="p">,</span> <span class="n">topic</span><span class="p">,</span> <span class="s1">&#39;topic&#39;</span><span class="p">)</span>
</span><span id="Client-826"><a href="#Client-826"><span class="linenos">826</span></a> <span class="n">_check_type</span><span class="p">(</span><span class="n">_pulsar</span><span class="o">.</span><span class="n">MessageId</span><span class="p">,</span> <span class="n">start_message_id</span><span class="p">,</span> <span class="s1">&#39;start_message_id&#39;</span><span class="p">)</span>
</span><span id="Client-827"><a href="#Client-827"><span class="linenos">827</span></a> <span class="n">_check_type</span><span class="p">(</span><span class="n">_schema</span><span class="o">.</span><span class="n">Schema</span><span class="p">,</span> <span class="n">schema</span><span class="p">,</span> <span class="s1">&#39;schema&#39;</span><span class="p">)</span>
</span><span id="Client-828"><a href="#Client-828"><span class="linenos">828</span></a> <span class="n">_check_type</span><span class="p">(</span><span class="nb">int</span><span class="p">,</span> <span class="n">receiver_queue_size</span><span class="p">,</span> <span class="s1">&#39;receiver_queue_size&#39;</span><span class="p">)</span>
</span><span id="Client-829"><a href="#Client-829"><span class="linenos">829</span></a> <span class="n">_check_type_or_none</span><span class="p">(</span><span class="nb">str</span><span class="p">,</span> <span class="n">reader_name</span><span class="p">,</span> <span class="s1">&#39;reader_name&#39;</span><span class="p">)</span>
</span><span id="Client-830"><a href="#Client-830"><span class="linenos">830</span></a> <span class="n">_check_type_or_none</span><span class="p">(</span><span class="nb">str</span><span class="p">,</span> <span class="n">subscription_role_prefix</span><span class="p">,</span> <span class="s1">&#39;subscription_role_prefix&#39;</span><span class="p">)</span>
</span><span id="Client-831"><a href="#Client-831"><span class="linenos">831</span></a> <span class="n">_check_type</span><span class="p">(</span><span class="nb">bool</span><span class="p">,</span> <span class="n">is_read_compacted</span><span class="p">,</span> <span class="s1">&#39;is_read_compacted&#39;</span><span class="p">)</span>
</span><span id="Client-832"><a href="#Client-832"><span class="linenos">832</span></a> <span class="n">_check_type_or_none</span><span class="p">(</span><span class="n">CryptoKeyReader</span><span class="p">,</span> <span class="n">crypto_key_reader</span><span class="p">,</span> <span class="s1">&#39;crypto_key_reader&#39;</span><span class="p">)</span>
</span><span id="Client-833"><a href="#Client-833"><span class="linenos">833</span></a>
</span><span id="Client-834"><a href="#Client-834"><span class="linenos">834</span></a> <span class="n">conf</span> <span class="o">=</span> <span class="n">_pulsar</span><span class="o">.</span><span class="n">ReaderConfiguration</span><span class="p">()</span>
</span><span id="Client-835"><a href="#Client-835"><span class="linenos">835</span></a> <span class="k">if</span> <span class="n">reader_listener</span><span class="p">:</span>
</span><span id="Client-836"><a href="#Client-836"><span class="linenos">836</span></a> <span class="n">conf</span><span class="o">.</span><span class="n">reader_listener</span><span class="p">(</span><span class="n">_listener_wrapper</span><span class="p">(</span><span class="n">reader_listener</span><span class="p">,</span> <span class="n">schema</span><span class="p">))</span>
</span><span id="Client-837"><a href="#Client-837"><span class="linenos">837</span></a> <span class="n">conf</span><span class="o">.</span><span class="n">receiver_queue_size</span><span class="p">(</span><span class="n">receiver_queue_size</span><span class="p">)</span>
</span><span id="Client-838"><a href="#Client-838"><span class="linenos">838</span></a> <span class="k">if</span> <span class="n">reader_name</span><span class="p">:</span>
</span><span id="Client-839"><a href="#Client-839"><span class="linenos">839</span></a> <span class="n">conf</span><span class="o">.</span><span class="n">reader_name</span><span class="p">(</span><span class="n">reader_name</span><span class="p">)</span>
</span><span id="Client-840"><a href="#Client-840"><span class="linenos">840</span></a> <span class="k">if</span> <span class="n">subscription_role_prefix</span><span class="p">:</span>
</span><span id="Client-841"><a href="#Client-841"><span class="linenos">841</span></a> <span class="n">conf</span><span class="o">.</span><span class="n">subscription_role_prefix</span><span class="p">(</span><span class="n">subscription_role_prefix</span><span class="p">)</span>
</span><span id="Client-842"><a href="#Client-842"><span class="linenos">842</span></a> <span class="n">conf</span><span class="o">.</span><span class="n">schema</span><span class="p">(</span><span class="n">schema</span><span class="o">.</span><span class="n">schema_info</span><span class="p">())</span>
</span><span id="Client-843"><a href="#Client-843"><span class="linenos">843</span></a> <span class="n">conf</span><span class="o">.</span><span class="n">read_compacted</span><span class="p">(</span><span class="n">is_read_compacted</span><span class="p">)</span>
</span><span id="Client-844"><a href="#Client-844"><span class="linenos">844</span></a> <span class="k">if</span> <span class="n">crypto_key_reader</span><span class="p">:</span>
</span><span id="Client-845"><a href="#Client-845"><span class="linenos">845</span></a> <span class="n">conf</span><span class="o">.</span><span class="n">crypto_key_reader</span><span class="p">(</span><span class="n">crypto_key_reader</span><span class="o">.</span><span class="n">cryptoKeyReader</span><span class="p">)</span>
</span><span id="Client-846"><a href="#Client-846"><span class="linenos">846</span></a>
</span><span id="Client-847"><a href="#Client-847"><span class="linenos">847</span></a> <span class="n">c</span> <span class="o">=</span> <span class="n">Reader</span><span class="p">()</span>
</span><span id="Client-848"><a href="#Client-848"><span class="linenos">848</span></a> <span class="n">c</span><span class="o">.</span><span class="n">_reader</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_client</span><span class="o">.</span><span class="n">create_reader</span><span class="p">(</span><span class="n">topic</span><span class="p">,</span> <span class="n">start_message_id</span><span class="p">,</span> <span class="n">conf</span><span class="p">)</span>
</span><span id="Client-849"><a href="#Client-849"><span class="linenos">849</span></a> <span class="n">c</span><span class="o">.</span><span class="n">_client</span> <span class="o">=</span> <span class="bp">self</span>
</span><span id="Client-850"><a href="#Client-850"><span class="linenos">850</span></a> <span class="n">c</span><span class="o">.</span><span class="n">_schema</span> <span class="o">=</span> <span class="n">schema</span>
</span><span id="Client-851"><a href="#Client-851"><span class="linenos">851</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_consumers</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">c</span><span class="p">)</span>
</span><span id="Client-852"><a href="#Client-852"><span class="linenos">852</span></a> <span class="k">return</span> <span class="n">c</span>
</span><span id="Client-853"><a href="#Client-853"><span class="linenos">853</span></a>
</span><span id="Client-854"><a href="#Client-854"><span class="linenos">854</span></a> <span class="k">def</span> <span class="nf">get_topic_partitions</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">topic</span><span class="p">):</span>
</span><span id="Client-855"><a href="#Client-855"><span class="linenos">855</span></a> <span class="sd">&quot;&quot;&quot;</span>
</span><span id="Client-856"><a href="#Client-856"><span class="linenos">856</span></a><span class="sd"> Get the list of partitions for a given topic.</span>
</span><span id="Client-857"><a href="#Client-857"><span class="linenos">857</span></a>
</span><span id="Client-858"><a href="#Client-858"><span class="linenos">858</span></a><span class="sd"> If the topic is partitioned, this will return a list of partition names. If the topic is not</span>
</span><span id="Client-859"><a href="#Client-859"><span class="linenos">859</span></a><span class="sd"> partitioned, the returned list will contain the topic name itself.</span>
</span><span id="Client-860"><a href="#Client-860"><span class="linenos">860</span></a>
</span><span id="Client-861"><a href="#Client-861"><span class="linenos">861</span></a><span class="sd"> This can be used to discover the partitions and create Reader, Consumer or Producer</span>
</span><span id="Client-862"><a href="#Client-862"><span class="linenos">862</span></a><span class="sd"> instances directly on a particular partition.</span>
</span><span id="Client-863"><a href="#Client-863"><span class="linenos">863</span></a><span class="sd"> :param topic: the topic name to lookup</span>
</span><span id="Client-864"><a href="#Client-864"><span class="linenos">864</span></a><span class="sd"> :return: a list of partition name</span>
</span><span id="Client-865"><a href="#Client-865"><span class="linenos">865</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="Client-866"><a href="#Client-866"><span class="linenos">866</span></a> <span class="n">_check_type</span><span class="p">(</span><span class="nb">str</span><span class="p">,</span> <span class="n">topic</span><span class="p">,</span> <span class="s1">&#39;topic&#39;</span><span class="p">)</span>
</span><span id="Client-867"><a href="#Client-867"><span class="linenos">867</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_client</span><span class="o">.</span><span class="n">get_topic_partitions</span><span class="p">(</span><span class="n">topic</span><span class="p">)</span>
</span><span id="Client-868"><a href="#Client-868"><span class="linenos">868</span></a>
</span><span id="Client-869"><a href="#Client-869"><span class="linenos">869</span></a> <span class="k">def</span> <span class="nf">shutdown</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
</span><span id="Client-870"><a href="#Client-870"><span class="linenos">870</span></a> <span class="sd">&quot;&quot;&quot;</span>
</span><span id="Client-871"><a href="#Client-871"><span class="linenos">871</span></a><span class="sd"> Perform immediate shutdown of Pulsar client.</span>
</span><span id="Client-872"><a href="#Client-872"><span class="linenos">872</span></a>
</span><span id="Client-873"><a href="#Client-873"><span class="linenos">873</span></a><span class="sd"> Release all resources and close all producer, consumer, and readers without waiting</span>
</span><span id="Client-874"><a href="#Client-874"><span class="linenos">874</span></a><span class="sd"> for ongoing operations to complete.</span>
</span><span id="Client-875"><a href="#Client-875"><span class="linenos">875</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="Client-876"><a href="#Client-876"><span class="linenos">876</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_client</span><span class="o">.</span><span class="n">shutdown</span><span class="p">()</span>
</span><span id="Client-877"><a href="#Client-877"><span class="linenos">877</span></a>
</span><span id="Client-878"><a href="#Client-878"><span class="linenos">878</span></a> <span class="k">def</span> <span class="nf">close</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
</span><span id="Client-879"><a href="#Client-879"><span class="linenos">879</span></a> <span class="sd">&quot;&quot;&quot;</span>
</span><span id="Client-880"><a href="#Client-880"><span class="linenos">880</span></a><span class="sd"> Close the client and all the associated producers and consumers</span>
</span><span id="Client-881"><a href="#Client-881"><span class="linenos">881</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="Client-882"><a href="#Client-882"><span class="linenos">882</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_client</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
</span></pre></div>
<div class="docstring"><p>The Pulsar client. A single client instance can be used to create producers
and consumers on multiple topics.</p>
<p>The client will share the same connection pool and threads across all
producers and consumers.</p>
</div>
<div id="Client.__init__" class="classattr">
<input id="Client.__init__-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<div class="attr function">
<span class="name">Client</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="n">service_url</span>,</span><span class="param"> <span class="n">authentication</span><span class="o">=</span><span class="kc">None</span>,</span><span class="param"> <span class="n">operation_timeout_seconds</span><span class="o">=</span><span class="mi">30</span>,</span><span class="param"> <span class="n">io_threads</span><span class="o">=</span><span class="mi">1</span>,</span><span class="param"> <span class="n">message_listener_threads</span><span class="o">=</span><span class="mi">1</span>,</span><span class="param"> <span class="n">concurrent_lookup_requests</span><span class="o">=</span><span class="mi">50000</span>,</span><span class="param"> <span class="n">log_conf_file_path</span><span class="o">=</span><span class="kc">None</span>,</span><span class="param"> <span class="n">use_tls</span><span class="o">=</span><span class="kc">False</span>,</span><span class="param"> <span class="n">tls_trust_certs_file_path</span><span class="o">=</span><span class="kc">None</span>,</span><span class="param"> <span class="n">tls_allow_insecure_connection</span><span class="o">=</span><span class="kc">False</span>,</span><span class="param"> <span class="n">tls_validate_hostname</span><span class="o">=</span><span class="kc">False</span>,</span><span class="param"> <span class="n">logger</span><span class="o">=</span><span class="kc">None</span>,</span><span class="param"> <span class="n">connection_timeout_ms</span><span class="o">=</span><span class="mi">10000</span></span>)</span>
<label class="view-source-button" for="Client.__init__-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#Client.__init__"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="Client.__init__-356"><a href="#Client.__init__-356"><span class="linenos">356</span></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">service_url</span><span class="p">,</span>
</span><span id="Client.__init__-357"><a href="#Client.__init__-357"><span class="linenos">357</span></a> <span class="n">authentication</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
</span><span id="Client.__init__-358"><a href="#Client.__init__-358"><span class="linenos">358</span></a> <span class="n">operation_timeout_seconds</span><span class="o">=</span><span class="mi">30</span><span class="p">,</span>
</span><span id="Client.__init__-359"><a href="#Client.__init__-359"><span class="linenos">359</span></a> <span class="n">io_threads</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span>
</span><span id="Client.__init__-360"><a href="#Client.__init__-360"><span class="linenos">360</span></a> <span class="n">message_listener_threads</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span>
</span><span id="Client.__init__-361"><a href="#Client.__init__-361"><span class="linenos">361</span></a> <span class="n">concurrent_lookup_requests</span><span class="o">=</span><span class="mi">50000</span><span class="p">,</span>
</span><span id="Client.__init__-362"><a href="#Client.__init__-362"><span class="linenos">362</span></a> <span class="n">log_conf_file_path</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
</span><span id="Client.__init__-363"><a href="#Client.__init__-363"><span class="linenos">363</span></a> <span class="n">use_tls</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
</span><span id="Client.__init__-364"><a href="#Client.__init__-364"><span class="linenos">364</span></a> <span class="n">tls_trust_certs_file_path</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
</span><span id="Client.__init__-365"><a href="#Client.__init__-365"><span class="linenos">365</span></a> <span class="n">tls_allow_insecure_connection</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
</span><span id="Client.__init__-366"><a href="#Client.__init__-366"><span class="linenos">366</span></a> <span class="n">tls_validate_hostname</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
</span><span id="Client.__init__-367"><a href="#Client.__init__-367"><span class="linenos">367</span></a> <span class="n">logger</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
</span><span id="Client.__init__-368"><a href="#Client.__init__-368"><span class="linenos">368</span></a> <span class="n">connection_timeout_ms</span><span class="o">=</span><span class="mi">10000</span><span class="p">,</span>
</span><span id="Client.__init__-369"><a href="#Client.__init__-369"><span class="linenos">369</span></a> <span class="p">):</span>
</span><span id="Client.__init__-370"><a href="#Client.__init__-370"><span class="linenos">370</span></a> <span class="sd">&quot;&quot;&quot;</span>
</span><span id="Client.__init__-371"><a href="#Client.__init__-371"><span class="linenos">371</span></a><span class="sd"> Create a new Pulsar client instance.</span>
</span><span id="Client.__init__-372"><a href="#Client.__init__-372"><span class="linenos">372</span></a>
</span><span id="Client.__init__-373"><a href="#Client.__init__-373"><span class="linenos">373</span></a><span class="sd"> **Args**</span>
</span><span id="Client.__init__-374"><a href="#Client.__init__-374"><span class="linenos">374</span></a>
</span><span id="Client.__init__-375"><a href="#Client.__init__-375"><span class="linenos">375</span></a><span class="sd"> * `service_url`: The Pulsar service url eg: pulsar://my-broker.com:6650/</span>
</span><span id="Client.__init__-376"><a href="#Client.__init__-376"><span class="linenos">376</span></a>
</span><span id="Client.__init__-377"><a href="#Client.__init__-377"><span class="linenos">377</span></a><span class="sd"> **Options**</span>
</span><span id="Client.__init__-378"><a href="#Client.__init__-378"><span class="linenos">378</span></a>
</span><span id="Client.__init__-379"><a href="#Client.__init__-379"><span class="linenos">379</span></a><span class="sd"> * `authentication`:</span>
</span><span id="Client.__init__-380"><a href="#Client.__init__-380"><span class="linenos">380</span></a><span class="sd"> Set the authentication provider to be used with the broker. For example:</span>
</span><span id="Client.__init__-381"><a href="#Client.__init__-381"><span class="linenos">381</span></a><span class="sd"> `AuthenticationTls`, AuthenticaionToken, `AuthenticationAthenz`or `AuthenticationOauth2`</span>
</span><span id="Client.__init__-382"><a href="#Client.__init__-382"><span class="linenos">382</span></a><span class="sd"> * `operation_timeout_seconds`:</span>
</span><span id="Client.__init__-383"><a href="#Client.__init__-383"><span class="linenos">383</span></a><span class="sd"> Set timeout on client operations (subscribe, create producer, close,</span>
</span><span id="Client.__init__-384"><a href="#Client.__init__-384"><span class="linenos">384</span></a><span class="sd"> unsubscribe).</span>
</span><span id="Client.__init__-385"><a href="#Client.__init__-385"><span class="linenos">385</span></a><span class="sd"> * `io_threads`:</span>
</span><span id="Client.__init__-386"><a href="#Client.__init__-386"><span class="linenos">386</span></a><span class="sd"> Set the number of IO threads to be used by the Pulsar client.</span>
</span><span id="Client.__init__-387"><a href="#Client.__init__-387"><span class="linenos">387</span></a><span class="sd"> * `message_listener_threads`:</span>
</span><span id="Client.__init__-388"><a href="#Client.__init__-388"><span class="linenos">388</span></a><span class="sd"> Set the number of threads to be used by the Pulsar client when</span>
</span><span id="Client.__init__-389"><a href="#Client.__init__-389"><span class="linenos">389</span></a><span class="sd"> delivering messages through message listener. The default is 1 thread</span>
</span><span id="Client.__init__-390"><a href="#Client.__init__-390"><span class="linenos">390</span></a><span class="sd"> per Pulsar client. If using more than 1 thread, messages for distinct</span>
</span><span id="Client.__init__-391"><a href="#Client.__init__-391"><span class="linenos">391</span></a><span class="sd"> `message_listener`s will be delivered in different threads, however a</span>
</span><span id="Client.__init__-392"><a href="#Client.__init__-392"><span class="linenos">392</span></a><span class="sd"> single `MessageListener` will always be assigned to the same thread.</span>
</span><span id="Client.__init__-393"><a href="#Client.__init__-393"><span class="linenos">393</span></a><span class="sd"> * `concurrent_lookup_requests`:</span>
</span><span id="Client.__init__-394"><a href="#Client.__init__-394"><span class="linenos">394</span></a><span class="sd"> Number of concurrent lookup-requests allowed on each broker connection</span>
</span><span id="Client.__init__-395"><a href="#Client.__init__-395"><span class="linenos">395</span></a><span class="sd"> to prevent overload on the broker.</span>
</span><span id="Client.__init__-396"><a href="#Client.__init__-396"><span class="linenos">396</span></a><span class="sd"> * `log_conf_file_path`:</span>
</span><span id="Client.__init__-397"><a href="#Client.__init__-397"><span class="linenos">397</span></a><span class="sd"> Initialize log4cxx from a configuration file.</span>
</span><span id="Client.__init__-398"><a href="#Client.__init__-398"><span class="linenos">398</span></a><span class="sd"> * `use_tls`:</span>
</span><span id="Client.__init__-399"><a href="#Client.__init__-399"><span class="linenos">399</span></a><span class="sd"> Configure whether to use TLS encryption on the connection. This setting</span>
</span><span id="Client.__init__-400"><a href="#Client.__init__-400"><span class="linenos">400</span></a><span class="sd"> is deprecated. TLS will be automatically enabled if the `serviceUrl` is</span>
</span><span id="Client.__init__-401"><a href="#Client.__init__-401"><span class="linenos">401</span></a><span class="sd"> set to `pulsar+ssl://` or `https://`</span>
</span><span id="Client.__init__-402"><a href="#Client.__init__-402"><span class="linenos">402</span></a><span class="sd"> * `tls_trust_certs_file_path`:</span>
</span><span id="Client.__init__-403"><a href="#Client.__init__-403"><span class="linenos">403</span></a><span class="sd"> Set the path to the trusted TLS certificate file. If empty defaults to</span>
</span><span id="Client.__init__-404"><a href="#Client.__init__-404"><span class="linenos">404</span></a><span class="sd"> certifi.</span>
</span><span id="Client.__init__-405"><a href="#Client.__init__-405"><span class="linenos">405</span></a><span class="sd"> * `tls_allow_insecure_connection`:</span>
</span><span id="Client.__init__-406"><a href="#Client.__init__-406"><span class="linenos">406</span></a><span class="sd"> Configure whether the Pulsar client accepts untrusted TLS certificates</span>
</span><span id="Client.__init__-407"><a href="#Client.__init__-407"><span class="linenos">407</span></a><span class="sd"> from the broker.</span>
</span><span id="Client.__init__-408"><a href="#Client.__init__-408"><span class="linenos">408</span></a><span class="sd"> * `tls_validate_hostname`:</span>
</span><span id="Client.__init__-409"><a href="#Client.__init__-409"><span class="linenos">409</span></a><span class="sd"> Configure whether the Pulsar client validates that the hostname of the</span>
</span><span id="Client.__init__-410"><a href="#Client.__init__-410"><span class="linenos">410</span></a><span class="sd"> endpoint, matches the common name on the TLS certificate presented by</span>
</span><span id="Client.__init__-411"><a href="#Client.__init__-411"><span class="linenos">411</span></a><span class="sd"> the endpoint.</span>
</span><span id="Client.__init__-412"><a href="#Client.__init__-412"><span class="linenos">412</span></a><span class="sd"> * `logger`:</span>
</span><span id="Client.__init__-413"><a href="#Client.__init__-413"><span class="linenos">413</span></a><span class="sd"> Set a Python logger for this Pulsar client. Should be an instance of `logging.Logger`.</span>
</span><span id="Client.__init__-414"><a href="#Client.__init__-414"><span class="linenos">414</span></a><span class="sd"> * `connection_timeout_ms`:</span>
</span><span id="Client.__init__-415"><a href="#Client.__init__-415"><span class="linenos">415</span></a><span class="sd"> Set timeout in milliseconds on TCP connections.</span>
</span><span id="Client.__init__-416"><a href="#Client.__init__-416"><span class="linenos">416</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="Client.__init__-417"><a href="#Client.__init__-417"><span class="linenos">417</span></a> <span class="n">_check_type</span><span class="p">(</span><span class="nb">str</span><span class="p">,</span> <span class="n">service_url</span><span class="p">,</span> <span class="s1">&#39;service_url&#39;</span><span class="p">)</span>
</span><span id="Client.__init__-418"><a href="#Client.__init__-418"><span class="linenos">418</span></a> <span class="n">_check_type_or_none</span><span class="p">(</span><span class="n">Authentication</span><span class="p">,</span> <span class="n">authentication</span><span class="p">,</span> <span class="s1">&#39;authentication&#39;</span><span class="p">)</span>
</span><span id="Client.__init__-419"><a href="#Client.__init__-419"><span class="linenos">419</span></a> <span class="n">_check_type</span><span class="p">(</span><span class="nb">int</span><span class="p">,</span> <span class="n">operation_timeout_seconds</span><span class="p">,</span> <span class="s1">&#39;operation_timeout_seconds&#39;</span><span class="p">)</span>
</span><span id="Client.__init__-420"><a href="#Client.__init__-420"><span class="linenos">420</span></a> <span class="n">_check_type</span><span class="p">(</span><span class="nb">int</span><span class="p">,</span> <span class="n">connection_timeout_ms</span><span class="p">,</span> <span class="s1">&#39;connection_timeout_ms&#39;</span><span class="p">)</span>
</span><span id="Client.__init__-421"><a href="#Client.__init__-421"><span class="linenos">421</span></a> <span class="n">_check_type</span><span class="p">(</span><span class="nb">int</span><span class="p">,</span> <span class="n">io_threads</span><span class="p">,</span> <span class="s1">&#39;io_threads&#39;</span><span class="p">)</span>
</span><span id="Client.__init__-422"><a href="#Client.__init__-422"><span class="linenos">422</span></a> <span class="n">_check_type</span><span class="p">(</span><span class="nb">int</span><span class="p">,</span> <span class="n">message_listener_threads</span><span class="p">,</span> <span class="s1">&#39;message_listener_threads&#39;</span><span class="p">)</span>
</span><span id="Client.__init__-423"><a href="#Client.__init__-423"><span class="linenos">423</span></a> <span class="n">_check_type</span><span class="p">(</span><span class="nb">int</span><span class="p">,</span> <span class="n">concurrent_lookup_requests</span><span class="p">,</span> <span class="s1">&#39;concurrent_lookup_requests&#39;</span><span class="p">)</span>
</span><span id="Client.__init__-424"><a href="#Client.__init__-424"><span class="linenos">424</span></a> <span class="n">_check_type_or_none</span><span class="p">(</span><span class="nb">str</span><span class="p">,</span> <span class="n">log_conf_file_path</span><span class="p">,</span> <span class="s1">&#39;log_conf_file_path&#39;</span><span class="p">)</span>
</span><span id="Client.__init__-425"><a href="#Client.__init__-425"><span class="linenos">425</span></a> <span class="n">_check_type</span><span class="p">(</span><span class="nb">bool</span><span class="p">,</span> <span class="n">use_tls</span><span class="p">,</span> <span class="s1">&#39;use_tls&#39;</span><span class="p">)</span>
</span><span id="Client.__init__-426"><a href="#Client.__init__-426"><span class="linenos">426</span></a> <span class="n">_check_type_or_none</span><span class="p">(</span><span class="nb">str</span><span class="p">,</span> <span class="n">tls_trust_certs_file_path</span><span class="p">,</span> <span class="s1">&#39;tls_trust_certs_file_path&#39;</span><span class="p">)</span>
</span><span id="Client.__init__-427"><a href="#Client.__init__-427"><span class="linenos">427</span></a> <span class="n">_check_type</span><span class="p">(</span><span class="nb">bool</span><span class="p">,</span> <span class="n">tls_allow_insecure_connection</span><span class="p">,</span> <span class="s1">&#39;tls_allow_insecure_connection&#39;</span><span class="p">)</span>
</span><span id="Client.__init__-428"><a href="#Client.__init__-428"><span class="linenos">428</span></a> <span class="n">_check_type</span><span class="p">(</span><span class="nb">bool</span><span class="p">,</span> <span class="n">tls_validate_hostname</span><span class="p">,</span> <span class="s1">&#39;tls_validate_hostname&#39;</span><span class="p">)</span>
</span><span id="Client.__init__-429"><a href="#Client.__init__-429"><span class="linenos">429</span></a> <span class="n">_check_type_or_none</span><span class="p">(</span><span class="n">logging</span><span class="o">.</span><span class="n">Logger</span><span class="p">,</span> <span class="n">logger</span><span class="p">,</span> <span class="s1">&#39;logger&#39;</span><span class="p">)</span>
</span><span id="Client.__init__-430"><a href="#Client.__init__-430"><span class="linenos">430</span></a>
</span><span id="Client.__init__-431"><a href="#Client.__init__-431"><span class="linenos">431</span></a> <span class="n">conf</span> <span class="o">=</span> <span class="n">_pulsar</span><span class="o">.</span><span class="n">ClientConfiguration</span><span class="p">()</span>
</span><span id="Client.__init__-432"><a href="#Client.__init__-432"><span class="linenos">432</span></a> <span class="k">if</span> <span class="n">authentication</span><span class="p">:</span>
</span><span id="Client.__init__-433"><a href="#Client.__init__-433"><span class="linenos">433</span></a> <span class="n">conf</span><span class="o">.</span><span class="n">authentication</span><span class="p">(</span><span class="n">authentication</span><span class="o">.</span><span class="n">auth</span><span class="p">)</span>
</span><span id="Client.__init__-434"><a href="#Client.__init__-434"><span class="linenos">434</span></a> <span class="n">conf</span><span class="o">.</span><span class="n">operation_timeout_seconds</span><span class="p">(</span><span class="n">operation_timeout_seconds</span><span class="p">)</span>
</span><span id="Client.__init__-435"><a href="#Client.__init__-435"><span class="linenos">435</span></a> <span class="n">conf</span><span class="o">.</span><span class="n">connection_timeout</span><span class="p">(</span><span class="n">connection_timeout_ms</span><span class="p">)</span>
</span><span id="Client.__init__-436"><a href="#Client.__init__-436"><span class="linenos">436</span></a> <span class="n">conf</span><span class="o">.</span><span class="n">io_threads</span><span class="p">(</span><span class="n">io_threads</span><span class="p">)</span>
</span><span id="Client.__init__-437"><a href="#Client.__init__-437"><span class="linenos">437</span></a> <span class="n">conf</span><span class="o">.</span><span class="n">message_listener_threads</span><span class="p">(</span><span class="n">message_listener_threads</span><span class="p">)</span>
</span><span id="Client.__init__-438"><a href="#Client.__init__-438"><span class="linenos">438</span></a> <span class="n">conf</span><span class="o">.</span><span class="n">concurrent_lookup_requests</span><span class="p">(</span><span class="n">concurrent_lookup_requests</span><span class="p">)</span>
</span><span id="Client.__init__-439"><a href="#Client.__init__-439"><span class="linenos">439</span></a> <span class="k">if</span> <span class="n">log_conf_file_path</span><span class="p">:</span>
</span><span id="Client.__init__-440"><a href="#Client.__init__-440"><span class="linenos">440</span></a> <span class="n">conf</span><span class="o">.</span><span class="n">log_conf_file_path</span><span class="p">(</span><span class="n">log_conf_file_path</span><span class="p">)</span>
</span><span id="Client.__init__-441"><a href="#Client.__init__-441"><span class="linenos">441</span></a> <span class="k">if</span> <span class="n">logger</span><span class="p">:</span>
</span><span id="Client.__init__-442"><a href="#Client.__init__-442"><span class="linenos">442</span></a> <span class="n">conf</span><span class="o">.</span><span class="n">set_logger</span><span class="p">(</span><span class="n">logger</span><span class="p">)</span>
</span><span id="Client.__init__-443"><a href="#Client.__init__-443"><span class="linenos">443</span></a> <span class="k">if</span> <span class="n">use_tls</span> <span class="ow">or</span> <span class="n">service_url</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s1">&#39;pulsar+ssl://&#39;</span><span class="p">)</span> <span class="ow">or</span> <span class="n">service_url</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s1">&#39;https://&#39;</span><span class="p">):</span>
</span><span id="Client.__init__-444"><a href="#Client.__init__-444"><span class="linenos">444</span></a> <span class="n">conf</span><span class="o">.</span><span class="n">use_tls</span><span class="p">(</span><span class="kc">True</span><span class="p">)</span>
</span><span id="Client.__init__-445"><a href="#Client.__init__-445"><span class="linenos">445</span></a> <span class="k">if</span> <span class="n">tls_trust_certs_file_path</span><span class="p">:</span>
</span><span id="Client.__init__-446"><a href="#Client.__init__-446"><span class="linenos">446</span></a> <span class="n">conf</span><span class="o">.</span><span class="n">tls_trust_certs_file_path</span><span class="p">(</span><span class="n">tls_trust_certs_file_path</span><span class="p">)</span>
</span><span id="Client.__init__-447"><a href="#Client.__init__-447"><span class="linenos">447</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="Client.__init__-448"><a href="#Client.__init__-448"><span class="linenos">448</span></a> <span class="n">conf</span><span class="o">.</span><span class="n">tls_trust_certs_file_path</span><span class="p">(</span><span class="n">certifi</span><span class="o">.</span><span class="n">where</span><span class="p">())</span>
</span><span id="Client.__init__-449"><a href="#Client.__init__-449"><span class="linenos">449</span></a> <span class="n">conf</span><span class="o">.</span><span class="n">tls_allow_insecure_connection</span><span class="p">(</span><span class="n">tls_allow_insecure_connection</span><span class="p">)</span>
</span><span id="Client.__init__-450"><a href="#Client.__init__-450"><span class="linenos">450</span></a> <span class="n">conf</span><span class="o">.</span><span class="n">tls_validate_hostname</span><span class="p">(</span><span class="n">tls_validate_hostname</span><span class="p">)</span>
</span><span id="Client.__init__-451"><a href="#Client.__init__-451"><span class="linenos">451</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_client</span> <span class="o">=</span> <span class="n">_pulsar</span><span class="o">.</span><span class="n">Client</span><span class="p">(</span><span class="n">service_url</span><span class="p">,</span> <span class="n">conf</span><span class="p">)</span>
</span><span id="Client.__init__-452"><a href="#Client.__init__-452"><span class="linenos">452</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_consumers</span> <span class="o">=</span> <span class="p">[]</span>
</span></pre></div>
<div class="docstring"><p>Create a new Pulsar client instance.</p>
<p><strong>Args</strong></p>
<ul>
<li><code>service_url</code>: The Pulsar service url eg: pulsar://my-broker.com:6650/</li>
</ul>
<p><strong>Options</strong></p>
<ul>
<li><code>authentication</code>:
Set the authentication provider to be used with the broker. For example:
<code>AuthenticationTls</code>, AuthenticaionToken, <code><a href="#AuthenticationAthenz">AuthenticationAthenz</a></code>or <code><a href="#AuthenticationOauth2">AuthenticationOauth2</a></code></li>
<li><code>operation_timeout_seconds</code>:
Set timeout on client operations (subscribe, create producer, close,
unsubscribe).</li>
<li><code>io_threads</code>:
Set the number of IO threads to be used by the Pulsar client.</li>
<li><code>message_listener_threads</code>:
Set the number of threads to be used by the Pulsar client when
delivering messages through message listener. The default is 1 thread
per Pulsar client. If using more than 1 thread, messages for distinct
<code>message_listener</code>s will be delivered in different threads, however a
single <code>MessageListener</code> will always be assigned to the same thread.</li>
<li><code>concurrent_lookup_requests</code>:
Number of concurrent lookup-requests allowed on each broker connection
to prevent overload on the broker.</li>
<li><code>log_conf_file_path</code>:
Initialize log4cxx from a configuration file.</li>
<li><code>use_tls</code>:
Configure whether to use TLS encryption on the connection. This setting
is deprecated. TLS will be automatically enabled if the <code>serviceUrl</code> is
set to <code>pulsar+ssl://</code> or <code>https://</code></li>
<li><code>tls_trust_certs_file_path</code>:
Set the path to the trusted TLS certificate file. If empty defaults to
certifi.</li>
<li><code>tls_allow_insecure_connection</code>:
Configure whether the Pulsar client accepts untrusted TLS certificates
from the broker.</li>
<li><code>tls_validate_hostname</code>:
Configure whether the Pulsar client validates that the hostname of the
endpoint, matches the common name on the TLS certificate presented by
the endpoint.</li>
<li><code>logger</code>:
Set a Python logger for this Pulsar client. Should be an instance of <code>logging.Logger</code>.</li>
<li><code>connection_timeout_ms</code>:
Set timeout in milliseconds on TCP connections.</li>
</ul>
</div>
</div>
<div id="Client.create_producer" class="classattr">
<input id="Client.create_producer-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<div class="attr function">
<span class="def">def</span>
<span class="name">create_producer</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="bp">self</span>,</span><span class="param"> <span class="n">topic</span>,</span><span class="param"> <span class="n">producer_name</span><span class="o">=</span><span class="kc">None</span>,</span><span class="param"> <span class="n">schema</span><span class="o">=&lt;</span><span class="n"><a href="pulsar/schema/schema.html#BytesSchema">pulsar.schema.schema.BytesSchema</a></span> <span class="nb">object</span><span class="o">&gt;</span>,</span><span class="param"> <span class="n">initial_sequence_id</span><span class="o">=</span><span class="kc">None</span>,</span><span class="param"> <span class="n">send_timeout_millis</span><span class="o">=</span><span class="mi">30000</span>,</span><span class="param"> <span class="n">compression_type</span><span class="o">=</span><span class="n">_pulsar</span><span class="o">.</span><span class="n">CompressionType</span><span class="o">.</span><span class="n">NONE</span>,</span><span class="param"> <span class="n">max_pending_messages</span><span class="o">=</span><span class="mi">1000</span>,</span><span class="param"> <span class="n">max_pending_messages_across_partitions</span><span class="o">=</span><span class="mi">50000</span>,</span><span class="param"> <span class="n">block_if_queue_full</span><span class="o">=</span><span class="kc">False</span>,</span><span class="param"> <span class="n">batching_enabled</span><span class="o">=</span><span class="kc">False</span>,</span><span class="param"> <span class="n">batching_max_messages</span><span class="o">=</span><span class="mi">1000</span>,</span><span class="param"> <span class="n">batching_max_allowed_size_in_bytes</span><span class="o">=</span><span class="mi">131072</span>,</span><span class="param"> <span class="n">batching_max_publish_delay_ms</span><span class="o">=</span><span class="mi">10</span>,</span><span class="param"> <span class="n">message_routing_mode</span><span class="o">=</span><span class="n">_pulsar</span><span class="o">.</span><span class="n">PartitionsRoutingMode</span><span class="o">.</span><span class="n">RoundRobinDistribution</span>,</span><span class="param"> <span class="n">lazy_start_partitioned_producers</span><span class="o">=</span><span class="kc">False</span>,</span><span class="param"> <span class="n">properties</span><span class="o">=</span><span class="kc">None</span>,</span><span class="param"> <span class="n">batching_type</span><span class="o">=</span><span class="n">_pulsar</span><span class="o">.</span><span class="n">BatchingType</span><span class="o">.</span><span class="n">Default</span>,</span><span class="param"> <span class="n">encryption_key</span><span class="o">=</span><span class="kc">None</span>,</span><span class="param"> <span class="n">crypto_key_reader</span><span class="o">=</span><span class="kc">None</span></span><span class="return-annotation">):</span></span>
<label class="view-source-button" for="Client.create_producer-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#Client.create_producer"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="Client.create_producer-454"><a href="#Client.create_producer-454"><span class="linenos">454</span></a> <span class="k">def</span> <span class="nf">create_producer</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">topic</span><span class="p">,</span>
</span><span id="Client.create_producer-455"><a href="#Client.create_producer-455"><span class="linenos">455</span></a> <span class="n">producer_name</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
</span><span id="Client.create_producer-456"><a href="#Client.create_producer-456"><span class="linenos">456</span></a> <span class="n">schema</span><span class="o">=</span><span class="n">schema</span><span class="o">.</span><span class="n">BytesSchema</span><span class="p">(),</span>
</span><span id="Client.create_producer-457"><a href="#Client.create_producer-457"><span class="linenos">457</span></a> <span class="n">initial_sequence_id</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
</span><span id="Client.create_producer-458"><a href="#Client.create_producer-458"><span class="linenos">458</span></a> <span class="n">send_timeout_millis</span><span class="o">=</span><span class="mi">30000</span><span class="p">,</span>
</span><span id="Client.create_producer-459"><a href="#Client.create_producer-459"><span class="linenos">459</span></a> <span class="n">compression_type</span><span class="o">=</span><span class="n">CompressionType</span><span class="o">.</span><span class="n">NONE</span><span class="p">,</span>
</span><span id="Client.create_producer-460"><a href="#Client.create_producer-460"><span class="linenos">460</span></a> <span class="n">max_pending_messages</span><span class="o">=</span><span class="mi">1000</span><span class="p">,</span>
</span><span id="Client.create_producer-461"><a href="#Client.create_producer-461"><span class="linenos">461</span></a> <span class="n">max_pending_messages_across_partitions</span><span class="o">=</span><span class="mi">50000</span><span class="p">,</span>
</span><span id="Client.create_producer-462"><a href="#Client.create_producer-462"><span class="linenos">462</span></a> <span class="n">block_if_queue_full</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
</span><span id="Client.create_producer-463"><a href="#Client.create_producer-463"><span class="linenos">463</span></a> <span class="n">batching_enabled</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
</span><span id="Client.create_producer-464"><a href="#Client.create_producer-464"><span class="linenos">464</span></a> <span class="n">batching_max_messages</span><span class="o">=</span><span class="mi">1000</span><span class="p">,</span>
</span><span id="Client.create_producer-465"><a href="#Client.create_producer-465"><span class="linenos">465</span></a> <span class="n">batching_max_allowed_size_in_bytes</span><span class="o">=</span><span class="mi">128</span><span class="o">*</span><span class="mi">1024</span><span class="p">,</span>
</span><span id="Client.create_producer-466"><a href="#Client.create_producer-466"><span class="linenos">466</span></a> <span class="n">batching_max_publish_delay_ms</span><span class="o">=</span><span class="mi">10</span><span class="p">,</span>
</span><span id="Client.create_producer-467"><a href="#Client.create_producer-467"><span class="linenos">467</span></a> <span class="n">message_routing_mode</span><span class="o">=</span><span class="n">PartitionsRoutingMode</span><span class="o">.</span><span class="n">RoundRobinDistribution</span><span class="p">,</span>
</span><span id="Client.create_producer-468"><a href="#Client.create_producer-468"><span class="linenos">468</span></a> <span class="n">lazy_start_partitioned_producers</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
</span><span id="Client.create_producer-469"><a href="#Client.create_producer-469"><span class="linenos">469</span></a> <span class="n">properties</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
</span><span id="Client.create_producer-470"><a href="#Client.create_producer-470"><span class="linenos">470</span></a> <span class="n">batching_type</span><span class="o">=</span><span class="n">BatchingType</span><span class="o">.</span><span class="n">Default</span><span class="p">,</span>
</span><span id="Client.create_producer-471"><a href="#Client.create_producer-471"><span class="linenos">471</span></a> <span class="n">encryption_key</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
</span><span id="Client.create_producer-472"><a href="#Client.create_producer-472"><span class="linenos">472</span></a> <span class="n">crypto_key_reader</span><span class="o">=</span><span class="kc">None</span>
</span><span id="Client.create_producer-473"><a href="#Client.create_producer-473"><span class="linenos">473</span></a> <span class="p">):</span>
</span><span id="Client.create_producer-474"><a href="#Client.create_producer-474"><span class="linenos">474</span></a> <span class="sd">&quot;&quot;&quot;</span>
</span><span id="Client.create_producer-475"><a href="#Client.create_producer-475"><span class="linenos">475</span></a><span class="sd"> Create a new producer on a given topic.</span>
</span><span id="Client.create_producer-476"><a href="#Client.create_producer-476"><span class="linenos">476</span></a>
</span><span id="Client.create_producer-477"><a href="#Client.create_producer-477"><span class="linenos">477</span></a><span class="sd"> **Args**</span>
</span><span id="Client.create_producer-478"><a href="#Client.create_producer-478"><span class="linenos">478</span></a>
</span><span id="Client.create_producer-479"><a href="#Client.create_producer-479"><span class="linenos">479</span></a><span class="sd"> * `topic`:</span>
</span><span id="Client.create_producer-480"><a href="#Client.create_producer-480"><span class="linenos">480</span></a><span class="sd"> The topic name</span>
</span><span id="Client.create_producer-481"><a href="#Client.create_producer-481"><span class="linenos">481</span></a>
</span><span id="Client.create_producer-482"><a href="#Client.create_producer-482"><span class="linenos">482</span></a><span class="sd"> **Options**</span>
</span><span id="Client.create_producer-483"><a href="#Client.create_producer-483"><span class="linenos">483</span></a>
</span><span id="Client.create_producer-484"><a href="#Client.create_producer-484"><span class="linenos">484</span></a><span class="sd"> * `producer_name`:</span>
</span><span id="Client.create_producer-485"><a href="#Client.create_producer-485"><span class="linenos">485</span></a><span class="sd"> Specify a name for the producer. If not assigned,</span>
</span><span id="Client.create_producer-486"><a href="#Client.create_producer-486"><span class="linenos">486</span></a><span class="sd"> the system will generate a globally unique name which can be accessed</span>
</span><span id="Client.create_producer-487"><a href="#Client.create_producer-487"><span class="linenos">487</span></a><span class="sd"> with `Producer.producer_name()`. When specifying a name, it is app to</span>
</span><span id="Client.create_producer-488"><a href="#Client.create_producer-488"><span class="linenos">488</span></a><span class="sd"> the user to ensure that, for a given topic, the producer name is unique</span>
</span><span id="Client.create_producer-489"><a href="#Client.create_producer-489"><span class="linenos">489</span></a><span class="sd"> across all Pulsar&#39;s clusters.</span>
</span><span id="Client.create_producer-490"><a href="#Client.create_producer-490"><span class="linenos">490</span></a><span class="sd"> * `schema`:</span>
</span><span id="Client.create_producer-491"><a href="#Client.create_producer-491"><span class="linenos">491</span></a><span class="sd"> Define the schema of the data that will be published by this producer.</span>
</span><span id="Client.create_producer-492"><a href="#Client.create_producer-492"><span class="linenos">492</span></a><span class="sd"> The schema will be used for two purposes:</span>
</span><span id="Client.create_producer-493"><a href="#Client.create_producer-493"><span class="linenos">493</span></a><span class="sd"> - Validate the data format against the topic defined schema</span>
</span><span id="Client.create_producer-494"><a href="#Client.create_producer-494"><span class="linenos">494</span></a><span class="sd"> - Perform serialization/deserialization between data and objects</span>
</span><span id="Client.create_producer-495"><a href="#Client.create_producer-495"><span class="linenos">495</span></a><span class="sd"> An example for this parameter would be to pass `schema=JsonSchema(MyRecordClass)`.</span>
</span><span id="Client.create_producer-496"><a href="#Client.create_producer-496"><span class="linenos">496</span></a><span class="sd"> * `initial_sequence_id`:</span>
</span><span id="Client.create_producer-497"><a href="#Client.create_producer-497"><span class="linenos">497</span></a><span class="sd"> Set the baseline for the sequence ids for messages</span>
</span><span id="Client.create_producer-498"><a href="#Client.create_producer-498"><span class="linenos">498</span></a><span class="sd"> published by the producer. First message will be using</span>
</span><span id="Client.create_producer-499"><a href="#Client.create_producer-499"><span class="linenos">499</span></a><span class="sd"> `(initialSequenceId + 1)`` as its sequence id and subsequent messages will</span>
</span><span id="Client.create_producer-500"><a href="#Client.create_producer-500"><span class="linenos">500</span></a><span class="sd"> be assigned incremental sequence ids, if not otherwise specified.</span>
</span><span id="Client.create_producer-501"><a href="#Client.create_producer-501"><span class="linenos">501</span></a><span class="sd"> * `send_timeout_millis`:</span>
</span><span id="Client.create_producer-502"><a href="#Client.create_producer-502"><span class="linenos">502</span></a><span class="sd"> If a message is not acknowledged by the server before the</span>
</span><span id="Client.create_producer-503"><a href="#Client.create_producer-503"><span class="linenos">503</span></a><span class="sd"> `send_timeout` expires, an error will be reported.</span>
</span><span id="Client.create_producer-504"><a href="#Client.create_producer-504"><span class="linenos">504</span></a><span class="sd"> * `compression_type`:</span>
</span><span id="Client.create_producer-505"><a href="#Client.create_producer-505"><span class="linenos">505</span></a><span class="sd"> Set the compression type for the producer. By default, message</span>
</span><span id="Client.create_producer-506"><a href="#Client.create_producer-506"><span class="linenos">506</span></a><span class="sd"> payloads are not compressed. Supported compression types are</span>
</span><span id="Client.create_producer-507"><a href="#Client.create_producer-507"><span class="linenos">507</span></a><span class="sd"> `CompressionType.LZ4`, `CompressionType.ZLib`, `CompressionType.ZSTD` and `CompressionType.SNAPPY`.</span>
</span><span id="Client.create_producer-508"><a href="#Client.create_producer-508"><span class="linenos">508</span></a><span class="sd"> ZSTD is supported since Pulsar 2.3. Consumers will need to be at least at that</span>
</span><span id="Client.create_producer-509"><a href="#Client.create_producer-509"><span class="linenos">509</span></a><span class="sd"> release in order to be able to receive messages compressed with ZSTD.</span>
</span><span id="Client.create_producer-510"><a href="#Client.create_producer-510"><span class="linenos">510</span></a><span class="sd"> SNAPPY is supported since Pulsar 2.4. Consumers will need to be at least at that</span>
</span><span id="Client.create_producer-511"><a href="#Client.create_producer-511"><span class="linenos">511</span></a><span class="sd"> release in order to be able to receive messages compressed with SNAPPY.</span>
</span><span id="Client.create_producer-512"><a href="#Client.create_producer-512"><span class="linenos">512</span></a><span class="sd"> * `max_pending_messages`:</span>
</span><span id="Client.create_producer-513"><a href="#Client.create_producer-513"><span class="linenos">513</span></a><span class="sd"> Set the max size of the queue holding the messages pending to receive</span>
</span><span id="Client.create_producer-514"><a href="#Client.create_producer-514"><span class="linenos">514</span></a><span class="sd"> an acknowledgment from the broker.</span>
</span><span id="Client.create_producer-515"><a href="#Client.create_producer-515"><span class="linenos">515</span></a><span class="sd"> * `max_pending_messages_across_partitions`:</span>
</span><span id="Client.create_producer-516"><a href="#Client.create_producer-516"><span class="linenos">516</span></a><span class="sd"> Set the max size of the queue holding the messages pending to receive</span>
</span><span id="Client.create_producer-517"><a href="#Client.create_producer-517"><span class="linenos">517</span></a><span class="sd"> an acknowledgment across partitions from the broker.</span>
</span><span id="Client.create_producer-518"><a href="#Client.create_producer-518"><span class="linenos">518</span></a><span class="sd"> * `block_if_queue_full`: Set whether `send_async` operations should</span>
</span><span id="Client.create_producer-519"><a href="#Client.create_producer-519"><span class="linenos">519</span></a><span class="sd"> block when the outgoing message queue is full.</span>
</span><span id="Client.create_producer-520"><a href="#Client.create_producer-520"><span class="linenos">520</span></a><span class="sd"> * `message_routing_mode`:</span>
</span><span id="Client.create_producer-521"><a href="#Client.create_producer-521"><span class="linenos">521</span></a><span class="sd"> Set the message routing mode for the partitioned producer. Default is `PartitionsRoutingMode.RoundRobinDistribution`,</span>
</span><span id="Client.create_producer-522"><a href="#Client.create_producer-522"><span class="linenos">522</span></a><span class="sd"> other option is `PartitionsRoutingMode.UseSinglePartition`</span>
</span><span id="Client.create_producer-523"><a href="#Client.create_producer-523"><span class="linenos">523</span></a><span class="sd"> * `lazy_start_partitioned_producers`:</span>
</span><span id="Client.create_producer-524"><a href="#Client.create_producer-524"><span class="linenos">524</span></a><span class="sd"> This config affects producers of partitioned topics only. It controls whether</span>
</span><span id="Client.create_producer-525"><a href="#Client.create_producer-525"><span class="linenos">525</span></a><span class="sd"> producers register and connect immediately to the owner broker of each partition</span>
</span><span id="Client.create_producer-526"><a href="#Client.create_producer-526"><span class="linenos">526</span></a><span class="sd"> or start lazily on demand. The internal producer of one partition is always</span>
</span><span id="Client.create_producer-527"><a href="#Client.create_producer-527"><span class="linenos">527</span></a><span class="sd"> started eagerly, chosen by the routing policy, but the internal producers of</span>
</span><span id="Client.create_producer-528"><a href="#Client.create_producer-528"><span class="linenos">528</span></a><span class="sd"> any additional partitions are started on demand, upon receiving their first</span>
</span><span id="Client.create_producer-529"><a href="#Client.create_producer-529"><span class="linenos">529</span></a><span class="sd"> message.</span>
</span><span id="Client.create_producer-530"><a href="#Client.create_producer-530"><span class="linenos">530</span></a><span class="sd"> Using this mode can reduce the strain on brokers for topics with large numbers of</span>
</span><span id="Client.create_producer-531"><a href="#Client.create_producer-531"><span class="linenos">531</span></a><span class="sd"> partitions and when the SinglePartition routing policy is used without keyed messages.</span>
</span><span id="Client.create_producer-532"><a href="#Client.create_producer-532"><span class="linenos">532</span></a><span class="sd"> Because producer connection can be on demand, this can produce extra send latency</span>
</span><span id="Client.create_producer-533"><a href="#Client.create_producer-533"><span class="linenos">533</span></a><span class="sd"> for the first messages of a given partition.</span>
</span><span id="Client.create_producer-534"><a href="#Client.create_producer-534"><span class="linenos">534</span></a><span class="sd"> * `properties`:</span>
</span><span id="Client.create_producer-535"><a href="#Client.create_producer-535"><span class="linenos">535</span></a><span class="sd"> Sets the properties for the producer. The properties associated with a producer</span>
</span><span id="Client.create_producer-536"><a href="#Client.create_producer-536"><span class="linenos">536</span></a><span class="sd"> can be used for identify a producer at broker side.</span>
</span><span id="Client.create_producer-537"><a href="#Client.create_producer-537"><span class="linenos">537</span></a><span class="sd"> * `batching_type`:</span>
</span><span id="Client.create_producer-538"><a href="#Client.create_producer-538"><span class="linenos">538</span></a><span class="sd"> Sets the batching type for the producer.</span>
</span><span id="Client.create_producer-539"><a href="#Client.create_producer-539"><span class="linenos">539</span></a><span class="sd"> There are two batching type: DefaultBatching and KeyBasedBatching.</span>
</span><span id="Client.create_producer-540"><a href="#Client.create_producer-540"><span class="linenos">540</span></a><span class="sd"> - Default batching</span>
</span><span id="Client.create_producer-541"><a href="#Client.create_producer-541"><span class="linenos">541</span></a><span class="sd"> incoming single messages:</span>
</span><span id="Client.create_producer-542"><a href="#Client.create_producer-542"><span class="linenos">542</span></a><span class="sd"> (k1, v1), (k2, v1), (k3, v1), (k1, v2), (k2, v2), (k3, v2), (k1, v3), (k2, v3), (k3, v3)</span>
</span><span id="Client.create_producer-543"><a href="#Client.create_producer-543"><span class="linenos">543</span></a><span class="sd"> batched into single batch message:</span>
</span><span id="Client.create_producer-544"><a href="#Client.create_producer-544"><span class="linenos">544</span></a><span class="sd"> [(k1, v1), (k2, v1), (k3, v1), (k1, v2), (k2, v2), (k3, v2), (k1, v3), (k2, v3), (k3, v3)]</span>
</span><span id="Client.create_producer-545"><a href="#Client.create_producer-545"><span class="linenos">545</span></a>
</span><span id="Client.create_producer-546"><a href="#Client.create_producer-546"><span class="linenos">546</span></a><span class="sd"> - KeyBasedBatching</span>
</span><span id="Client.create_producer-547"><a href="#Client.create_producer-547"><span class="linenos">547</span></a><span class="sd"> incoming single messages:</span>
</span><span id="Client.create_producer-548"><a href="#Client.create_producer-548"><span class="linenos">548</span></a><span class="sd"> (k1, v1), (k2, v1), (k3, v1), (k1, v2), (k2, v2), (k3, v2), (k1, v3), (k2, v3), (k3, v3)</span>
</span><span id="Client.create_producer-549"><a href="#Client.create_producer-549"><span class="linenos">549</span></a><span class="sd"> batched into single batch message:</span>
</span><span id="Client.create_producer-550"><a href="#Client.create_producer-550"><span class="linenos">550</span></a><span class="sd"> [(k1, v1), (k1, v2), (k1, v3)], [(k2, v1), (k2, v2), (k2, v3)], [(k3, v1), (k3, v2), (k3, v3)]</span>
</span><span id="Client.create_producer-551"><a href="#Client.create_producer-551"><span class="linenos">551</span></a><span class="sd"> * encryption_key:</span>
</span><span id="Client.create_producer-552"><a href="#Client.create_producer-552"><span class="linenos">552</span></a><span class="sd"> The key used for symmetric encryption, configured on the producer side</span>
</span><span id="Client.create_producer-553"><a href="#Client.create_producer-553"><span class="linenos">553</span></a><span class="sd"> * crypto_key_reader:</span>
</span><span id="Client.create_producer-554"><a href="#Client.create_producer-554"><span class="linenos">554</span></a><span class="sd"> Symmetric encryption class implementation, configuring public key encryption messages for the producer</span>
</span><span id="Client.create_producer-555"><a href="#Client.create_producer-555"><span class="linenos">555</span></a><span class="sd"> and private key decryption messages for the consumer</span>
</span><span id="Client.create_producer-556"><a href="#Client.create_producer-556"><span class="linenos">556</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="Client.create_producer-557"><a href="#Client.create_producer-557"><span class="linenos">557</span></a> <span class="n">_check_type</span><span class="p">(</span><span class="nb">str</span><span class="p">,</span> <span class="n">topic</span><span class="p">,</span> <span class="s1">&#39;topic&#39;</span><span class="p">)</span>
</span><span id="Client.create_producer-558"><a href="#Client.create_producer-558"><span class="linenos">558</span></a> <span class="n">_check_type_or_none</span><span class="p">(</span><span class="nb">str</span><span class="p">,</span> <span class="n">producer_name</span><span class="p">,</span> <span class="s1">&#39;producer_name&#39;</span><span class="p">)</span>
</span><span id="Client.create_producer-559"><a href="#Client.create_producer-559"><span class="linenos">559</span></a> <span class="n">_check_type</span><span class="p">(</span><span class="n">_schema</span><span class="o">.</span><span class="n">Schema</span><span class="p">,</span> <span class="n">schema</span><span class="p">,</span> <span class="s1">&#39;schema&#39;</span><span class="p">)</span>
</span><span id="Client.create_producer-560"><a href="#Client.create_producer-560"><span class="linenos">560</span></a> <span class="n">_check_type_or_none</span><span class="p">(</span><span class="nb">int</span><span class="p">,</span> <span class="n">initial_sequence_id</span><span class="p">,</span> <span class="s1">&#39;initial_sequence_id&#39;</span><span class="p">)</span>
</span><span id="Client.create_producer-561"><a href="#Client.create_producer-561"><span class="linenos">561</span></a> <span class="n">_check_type</span><span class="p">(</span><span class="nb">int</span><span class="p">,</span> <span class="n">send_timeout_millis</span><span class="p">,</span> <span class="s1">&#39;send_timeout_millis&#39;</span><span class="p">)</span>
</span><span id="Client.create_producer-562"><a href="#Client.create_producer-562"><span class="linenos">562</span></a> <span class="n">_check_type</span><span class="p">(</span><span class="n">CompressionType</span><span class="p">,</span> <span class="n">compression_type</span><span class="p">,</span> <span class="s1">&#39;compression_type&#39;</span><span class="p">)</span>
</span><span id="Client.create_producer-563"><a href="#Client.create_producer-563"><span class="linenos">563</span></a> <span class="n">_check_type</span><span class="p">(</span><span class="nb">int</span><span class="p">,</span> <span class="n">max_pending_messages</span><span class="p">,</span> <span class="s1">&#39;max_pending_messages&#39;</span><span class="p">)</span>
</span><span id="Client.create_producer-564"><a href="#Client.create_producer-564"><span class="linenos">564</span></a> <span class="n">_check_type</span><span class="p">(</span><span class="nb">int</span><span class="p">,</span> <span class="n">max_pending_messages_across_partitions</span><span class="p">,</span> <span class="s1">&#39;max_pending_messages_across_partitions&#39;</span><span class="p">)</span>
</span><span id="Client.create_producer-565"><a href="#Client.create_producer-565"><span class="linenos">565</span></a> <span class="n">_check_type</span><span class="p">(</span><span class="nb">bool</span><span class="p">,</span> <span class="n">block_if_queue_full</span><span class="p">,</span> <span class="s1">&#39;block_if_queue_full&#39;</span><span class="p">)</span>
</span><span id="Client.create_producer-566"><a href="#Client.create_producer-566"><span class="linenos">566</span></a> <span class="n">_check_type</span><span class="p">(</span><span class="nb">bool</span><span class="p">,</span> <span class="n">batching_enabled</span><span class="p">,</span> <span class="s1">&#39;batching_enabled&#39;</span><span class="p">)</span>
</span><span id="Client.create_producer-567"><a href="#Client.create_producer-567"><span class="linenos">567</span></a> <span class="n">_check_type</span><span class="p">(</span><span class="nb">int</span><span class="p">,</span> <span class="n">batching_max_messages</span><span class="p">,</span> <span class="s1">&#39;batching_max_messages&#39;</span><span class="p">)</span>
</span><span id="Client.create_producer-568"><a href="#Client.create_producer-568"><span class="linenos">568</span></a> <span class="n">_check_type</span><span class="p">(</span><span class="nb">int</span><span class="p">,</span> <span class="n">batching_max_allowed_size_in_bytes</span><span class="p">,</span> <span class="s1">&#39;batching_max_allowed_size_in_bytes&#39;</span><span class="p">)</span>
</span><span id="Client.create_producer-569"><a href="#Client.create_producer-569"><span class="linenos">569</span></a> <span class="n">_check_type</span><span class="p">(</span><span class="nb">int</span><span class="p">,</span> <span class="n">batching_max_publish_delay_ms</span><span class="p">,</span> <span class="s1">&#39;batching_max_publish_delay_ms&#39;</span><span class="p">)</span>
</span><span id="Client.create_producer-570"><a href="#Client.create_producer-570"><span class="linenos">570</span></a> <span class="n">_check_type_or_none</span><span class="p">(</span><span class="nb">dict</span><span class="p">,</span> <span class="n">properties</span><span class="p">,</span> <span class="s1">&#39;properties&#39;</span><span class="p">)</span>
</span><span id="Client.create_producer-571"><a href="#Client.create_producer-571"><span class="linenos">571</span></a> <span class="n">_check_type</span><span class="p">(</span><span class="n">BatchingType</span><span class="p">,</span> <span class="n">batching_type</span><span class="p">,</span> <span class="s1">&#39;batching_type&#39;</span><span class="p">)</span>
</span><span id="Client.create_producer-572"><a href="#Client.create_producer-572"><span class="linenos">572</span></a> <span class="n">_check_type_or_none</span><span class="p">(</span><span class="nb">str</span><span class="p">,</span> <span class="n">encryption_key</span><span class="p">,</span> <span class="s1">&#39;encryption_key&#39;</span><span class="p">)</span>
</span><span id="Client.create_producer-573"><a href="#Client.create_producer-573"><span class="linenos">573</span></a> <span class="n">_check_type_or_none</span><span class="p">(</span><span class="n">CryptoKeyReader</span><span class="p">,</span> <span class="n">crypto_key_reader</span><span class="p">,</span> <span class="s1">&#39;crypto_key_reader&#39;</span><span class="p">)</span>
</span><span id="Client.create_producer-574"><a href="#Client.create_producer-574"><span class="linenos">574</span></a> <span class="n">_check_type</span><span class="p">(</span><span class="nb">bool</span><span class="p">,</span> <span class="n">lazy_start_partitioned_producers</span><span class="p">,</span> <span class="s1">&#39;lazy_start_partitioned_producers&#39;</span><span class="p">)</span>
</span><span id="Client.create_producer-575"><a href="#Client.create_producer-575"><span class="linenos">575</span></a>
</span><span id="Client.create_producer-576"><a href="#Client.create_producer-576"><span class="linenos">576</span></a> <span class="n">conf</span> <span class="o">=</span> <span class="n">_pulsar</span><span class="o">.</span><span class="n">ProducerConfiguration</span><span class="p">()</span>
</span><span id="Client.create_producer-577"><a href="#Client.create_producer-577"><span class="linenos">577</span></a> <span class="n">conf</span><span class="o">.</span><span class="n">send_timeout_millis</span><span class="p">(</span><span class="n">send_timeout_millis</span><span class="p">)</span>
</span><span id="Client.create_producer-578"><a href="#Client.create_producer-578"><span class="linenos">578</span></a> <span class="n">conf</span><span class="o">.</span><span class="n">compression_type</span><span class="p">(</span><span class="n">compression_type</span><span class="p">)</span>
</span><span id="Client.create_producer-579"><a href="#Client.create_producer-579"><span class="linenos">579</span></a> <span class="n">conf</span><span class="o">.</span><span class="n">max_pending_messages</span><span class="p">(</span><span class="n">max_pending_messages</span><span class="p">)</span>
</span><span id="Client.create_producer-580"><a href="#Client.create_producer-580"><span class="linenos">580</span></a> <span class="n">conf</span><span class="o">.</span><span class="n">max_pending_messages_across_partitions</span><span class="p">(</span><span class="n">max_pending_messages_across_partitions</span><span class="p">)</span>
</span><span id="Client.create_producer-581"><a href="#Client.create_producer-581"><span class="linenos">581</span></a> <span class="n">conf</span><span class="o">.</span><span class="n">block_if_queue_full</span><span class="p">(</span><span class="n">block_if_queue_full</span><span class="p">)</span>
</span><span id="Client.create_producer-582"><a href="#Client.create_producer-582"><span class="linenos">582</span></a> <span class="n">conf</span><span class="o">.</span><span class="n">batching_enabled</span><span class="p">(</span><span class="n">batching_enabled</span><span class="p">)</span>
</span><span id="Client.create_producer-583"><a href="#Client.create_producer-583"><span class="linenos">583</span></a> <span class="n">conf</span><span class="o">.</span><span class="n">batching_max_messages</span><span class="p">(</span><span class="n">batching_max_messages</span><span class="p">)</span>
</span><span id="Client.create_producer-584"><a href="#Client.create_producer-584"><span class="linenos">584</span></a> <span class="n">conf</span><span class="o">.</span><span class="n">batching_max_allowed_size_in_bytes</span><span class="p">(</span><span class="n">batching_max_allowed_size_in_bytes</span><span class="p">)</span>
</span><span id="Client.create_producer-585"><a href="#Client.create_producer-585"><span class="linenos">585</span></a> <span class="n">conf</span><span class="o">.</span><span class="n">batching_max_publish_delay_ms</span><span class="p">(</span><span class="n">batching_max_publish_delay_ms</span><span class="p">)</span>
</span><span id="Client.create_producer-586"><a href="#Client.create_producer-586"><span class="linenos">586</span></a> <span class="n">conf</span><span class="o">.</span><span class="n">partitions_routing_mode</span><span class="p">(</span><span class="n">message_routing_mode</span><span class="p">)</span>
</span><span id="Client.create_producer-587"><a href="#Client.create_producer-587"><span class="linenos">587</span></a> <span class="n">conf</span><span class="o">.</span><span class="n">batching_type</span><span class="p">(</span><span class="n">batching_type</span><span class="p">)</span>
</span><span id="Client.create_producer-588"><a href="#Client.create_producer-588"><span class="linenos">588</span></a> <span class="n">conf</span><span class="o">.</span><span class="n">lazy_start_partitioned_producers</span><span class="p">(</span><span class="n">lazy_start_partitioned_producers</span><span class="p">)</span>
</span><span id="Client.create_producer-589"><a href="#Client.create_producer-589"><span class="linenos">589</span></a> <span class="k">if</span> <span class="n">producer_name</span><span class="p">:</span>
</span><span id="Client.create_producer-590"><a href="#Client.create_producer-590"><span class="linenos">590</span></a> <span class="n">conf</span><span class="o">.</span><span class="n">producer_name</span><span class="p">(</span><span class="n">producer_name</span><span class="p">)</span>
</span><span id="Client.create_producer-591"><a href="#Client.create_producer-591"><span class="linenos">591</span></a> <span class="k">if</span> <span class="n">initial_sequence_id</span><span class="p">:</span>
</span><span id="Client.create_producer-592"><a href="#Client.create_producer-592"><span class="linenos">592</span></a> <span class="n">conf</span><span class="o">.</span><span class="n">initial_sequence_id</span><span class="p">(</span><span class="n">initial_sequence_id</span><span class="p">)</span>
</span><span id="Client.create_producer-593"><a href="#Client.create_producer-593"><span class="linenos">593</span></a> <span class="k">if</span> <span class="n">properties</span><span class="p">:</span>
</span><span id="Client.create_producer-594"><a href="#Client.create_producer-594"><span class="linenos">594</span></a> <span class="k">for</span> <span class="n">k</span><span class="p">,</span> <span class="n">v</span> <span class="ow">in</span> <span class="n">properties</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
</span><span id="Client.create_producer-595"><a href="#Client.create_producer-595"><span class="linenos">595</span></a> <span class="n">conf</span><span class="o">.</span><span class="n">property</span><span class="p">(</span><span class="n">k</span><span class="p">,</span> <span class="n">v</span><span class="p">)</span>
</span><span id="Client.create_producer-596"><a href="#Client.create_producer-596"><span class="linenos">596</span></a>
</span><span id="Client.create_producer-597"><a href="#Client.create_producer-597"><span class="linenos">597</span></a> <span class="n">conf</span><span class="o">.</span><span class="n">schema</span><span class="p">(</span><span class="n">schema</span><span class="o">.</span><span class="n">schema_info</span><span class="p">())</span>
</span><span id="Client.create_producer-598"><a href="#Client.create_producer-598"><span class="linenos">598</span></a> <span class="k">if</span> <span class="n">encryption_key</span><span class="p">:</span>
</span><span id="Client.create_producer-599"><a href="#Client.create_producer-599"><span class="linenos">599</span></a> <span class="n">conf</span><span class="o">.</span><span class="n">encryption_key</span><span class="p">(</span><span class="n">encryption_key</span><span class="p">)</span>
</span><span id="Client.create_producer-600"><a href="#Client.create_producer-600"><span class="linenos">600</span></a> <span class="k">if</span> <span class="n">crypto_key_reader</span><span class="p">:</span>
</span><span id="Client.create_producer-601"><a href="#Client.create_producer-601"><span class="linenos">601</span></a> <span class="n">conf</span><span class="o">.</span><span class="n">crypto_key_reader</span><span class="p">(</span><span class="n">crypto_key_reader</span><span class="o">.</span><span class="n">cryptoKeyReader</span><span class="p">)</span>
</span><span id="Client.create_producer-602"><a href="#Client.create_producer-602"><span class="linenos">602</span></a>
</span><span id="Client.create_producer-603"><a href="#Client.create_producer-603"><span class="linenos">603</span></a> <span class="n">p</span> <span class="o">=</span> <span class="n">Producer</span><span class="p">()</span>
</span><span id="Client.create_producer-604"><a href="#Client.create_producer-604"><span class="linenos">604</span></a> <span class="n">p</span><span class="o">.</span><span class="n">_producer</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_client</span><span class="o">.</span><span class="n">create_producer</span><span class="p">(</span><span class="n">topic</span><span class="p">,</span> <span class="n">conf</span><span class="p">)</span>
</span><span id="Client.create_producer-605"><a href="#Client.create_producer-605"><span class="linenos">605</span></a> <span class="n">p</span><span class="o">.</span><span class="n">_schema</span> <span class="o">=</span> <span class="n">schema</span>
</span><span id="Client.create_producer-606"><a href="#Client.create_producer-606"><span class="linenos">606</span></a> <span class="n">p</span><span class="o">.</span><span class="n">_client</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_client</span>
</span><span id="Client.create_producer-607"><a href="#Client.create_producer-607"><span class="linenos">607</span></a> <span class="k">return</span> <span class="n">p</span>
</span></pre></div>
<div class="docstring"><p>Create a new producer on a given topic.</p>
<p><strong>Args</strong></p>
<ul>
<li><code>topic</code>:
The topic name</li>
</ul>
<p><strong>Options</strong></p>
<ul>
<li><code>producer_name</code>:
Specify a name for the producer. If not assigned,
the system will generate a globally unique name which can be accessed
with <code><a href="#Producer.producer_name">Producer.producer_name()</a></code>. When specifying a name, it is app to
the user to ensure that, for a given topic, the producer name is unique
across all Pulsar's clusters.</li>
<li><code>schema</code>:
Define the schema of the data that will be published by this producer.
The schema will be used for two purposes:
<ul>
<li>Validate the data format against the topic defined schema</li>
<li>Perform serialization/deserialization between data and objects
An example for this parameter would be to pass <code>schema=JsonSchema(MyRecordClass)</code>.</li>
</ul></li>
<li><code>initial_sequence_id</code>:
Set the baseline for the sequence ids for messages
published by the producer. First message will be using
`(initialSequenceId + 1)`` as its sequence id and subsequent messages will
be assigned incremental sequence ids, if not otherwise specified.</li>
<li><code>send_timeout_millis</code>:
If a message is not acknowledged by the server before the
<code>send_timeout</code> expires, an error will be reported.</li>
<li><code>compression_type</code>:
Set the compression type for the producer. By default, message
payloads are not compressed. Supported compression types are
<code>CompressionType.LZ4</code>, <code>CompressionType.ZLib</code>, <code>CompressionType.ZSTD</code> and <code>CompressionType.SNAPPY</code>.
ZSTD is supported since Pulsar 2.3. Consumers will need to be at least at that
release in order to be able to receive messages compressed with ZSTD.
SNAPPY is supported since Pulsar 2.4. Consumers will need to be at least at that
release in order to be able to receive messages compressed with SNAPPY.</li>
<li><code>max_pending_messages</code>:
Set the max size of the queue holding the messages pending to receive
an acknowledgment from the broker.</li>
<li><code>max_pending_messages_across_partitions</code>:
Set the max size of the queue holding the messages pending to receive
an acknowledgment across partitions from the broker.</li>
<li><code>block_if_queue_full</code>: Set whether <code>send_async</code> operations should
block when the outgoing message queue is full.</li>
<li><code>message_routing_mode</code>:
Set the message routing mode for the partitioned producer. Default is <code>PartitionsRoutingMode.RoundRobinDistribution</code>,
other option is <code>PartitionsRoutingMode.UseSinglePartition</code></li>
<li><code>lazy_start_partitioned_producers</code>:
This config affects producers of partitioned topics only. It controls whether
producers register and connect immediately to the owner broker of each partition
or start lazily on demand. The internal producer of one partition is always
started eagerly, chosen by the routing policy, but the internal producers of
any additional partitions are started on demand, upon receiving their first
message.
Using this mode can reduce the strain on brokers for topics with large numbers of
partitions and when the SinglePartition routing policy is used without keyed messages.
Because producer connection can be on demand, this can produce extra send latency
for the first messages of a given partition.</li>
<li><code>properties</code>:
Sets the properties for the producer. The properties associated with a producer
can be used for identify a producer at broker side.</li>
<li><p><code>batching_type</code>:
Sets the batching type for the producer.
There are two batching type: DefaultBatching and KeyBasedBatching.</p>
<ul>
<li><p>Default batching
incoming single messages:
(k1, v1), (k2, v1), (k3, v1), (k1, v2), (k2, v2), (k3, v2), (k1, v3), (k2, v3), (k3, v3)
batched into single batch message:
[(k1, v1), (k2, v1), (k3, v1), (k1, v2), (k2, v2), (k3, v2), (k1, v3), (k2, v3), (k3, v3)]</p></li>
<li><p>KeyBasedBatching
incoming single messages:
(k1, v1), (k2, v1), (k3, v1), (k1, v2), (k2, v2), (k3, v2), (k1, v3), (k2, v3), (k3, v3)
batched into single batch message:
[(k1, v1), (k1, v2), (k1, v3)], [(k2, v1), (k2, v2), (k2, v3)], [(k3, v1), (k3, v2), (k3, v3)]</p></li>
</ul></li>
<li>encryption_key:
The key used for symmetric encryption, configured on the producer side</li>
<li>crypto_key_reader:
Symmetric encryption class implementation, configuring public key encryption messages for the producer
and private key decryption messages for the consumer</li>
</ul>
</div>
</div>
<div id="Client.subscribe" class="classattr">
<input id="Client.subscribe-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<div class="attr function">
<span class="def">def</span>
<span class="name">subscribe</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="bp">self</span>,</span><span class="param"> <span class="n">topic</span>,</span><span class="param"> <span class="n">subscription_name</span>,</span><span class="param"> <span class="n">consumer_type</span><span class="o">=</span><span class="n">_pulsar</span><span class="o">.</span><span class="n">ConsumerType</span><span class="o">.</span><span class="n">Exclusive</span>,</span><span class="param"> <span class="n">schema</span><span class="o">=&lt;</span><span class="n"><a href="pulsar/schema/schema.html#BytesSchema">pulsar.schema.schema.BytesSchema</a></span> <span class="nb">object</span><span class="o">&gt;</span>,</span><span class="param"> <span class="n">message_listener</span><span class="o">=</span><span class="kc">None</span>,</span><span class="param"> <span class="n">receiver_queue_size</span><span class="o">=</span><span class="mi">1000</span>,</span><span class="param"> <span class="n">max_total_receiver_queue_size_across_partitions</span><span class="o">=</span><span class="mi">50000</span>,</span><span class="param"> <span class="n">consumer_name</span><span class="o">=</span><span class="kc">None</span>,</span><span class="param"> <span class="n">unacked_messages_timeout_ms</span><span class="o">=</span><span class="kc">None</span>,</span><span class="param"> <span class="n">broker_consumer_stats_cache_time_ms</span><span class="o">=</span><span class="mi">30000</span>,</span><span class="param"> <span class="n">negative_ack_redelivery_delay_ms</span><span class="o">=</span><span class="mi">60000</span>,</span><span class="param"> <span class="n">is_read_compacted</span><span class="o">=</span><span class="kc">False</span>,</span><span class="param"> <span class="n">properties</span><span class="o">=</span><span class="kc">None</span>,</span><span class="param"> <span class="n">pattern_auto_discovery_period</span><span class="o">=</span><span class="mi">60</span>,</span><span class="param"> <span class="n">initial_position</span><span class="o">=</span><span class="n">_pulsar</span><span class="o">.</span><span class="n">InitialPosition</span><span class="o">.</span><span class="n">Latest</span>,</span><span class="param"> <span class="n">crypto_key_reader</span><span class="o">=</span><span class="kc">None</span>,</span><span class="param"> <span class="n">replicate_subscription_state_enabled</span><span class="o">=</span><span class="kc">False</span></span><span class="return-annotation">):</span></span>
<label class="view-source-button" for="Client.subscribe-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#Client.subscribe"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="Client.subscribe-609"><a href="#Client.subscribe-609"><span class="linenos">609</span></a> <span class="k">def</span> <span class="nf">subscribe</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">topic</span><span class="p">,</span> <span class="n">subscription_name</span><span class="p">,</span>
</span><span id="Client.subscribe-610"><a href="#Client.subscribe-610"><span class="linenos">610</span></a> <span class="n">consumer_type</span><span class="o">=</span><span class="n">ConsumerType</span><span class="o">.</span><span class="n">Exclusive</span><span class="p">,</span>
</span><span id="Client.subscribe-611"><a href="#Client.subscribe-611"><span class="linenos">611</span></a> <span class="n">schema</span><span class="o">=</span><span class="n">schema</span><span class="o">.</span><span class="n">BytesSchema</span><span class="p">(),</span>
</span><span id="Client.subscribe-612"><a href="#Client.subscribe-612"><span class="linenos">612</span></a> <span class="n">message_listener</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
</span><span id="Client.subscribe-613"><a href="#Client.subscribe-613"><span class="linenos">613</span></a> <span class="n">receiver_queue_size</span><span class="o">=</span><span class="mi">1000</span><span class="p">,</span>
</span><span id="Client.subscribe-614"><a href="#Client.subscribe-614"><span class="linenos">614</span></a> <span class="n">max_total_receiver_queue_size_across_partitions</span><span class="o">=</span><span class="mi">50000</span><span class="p">,</span>
</span><span id="Client.subscribe-615"><a href="#Client.subscribe-615"><span class="linenos">615</span></a> <span class="n">consumer_name</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
</span><span id="Client.subscribe-616"><a href="#Client.subscribe-616"><span class="linenos">616</span></a> <span class="n">unacked_messages_timeout_ms</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
</span><span id="Client.subscribe-617"><a href="#Client.subscribe-617"><span class="linenos">617</span></a> <span class="n">broker_consumer_stats_cache_time_ms</span><span class="o">=</span><span class="mi">30000</span><span class="p">,</span>
</span><span id="Client.subscribe-618"><a href="#Client.subscribe-618"><span class="linenos">618</span></a> <span class="n">negative_ack_redelivery_delay_ms</span><span class="o">=</span><span class="mi">60000</span><span class="p">,</span>
</span><span id="Client.subscribe-619"><a href="#Client.subscribe-619"><span class="linenos">619</span></a> <span class="n">is_read_compacted</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
</span><span id="Client.subscribe-620"><a href="#Client.subscribe-620"><span class="linenos">620</span></a> <span class="n">properties</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
</span><span id="Client.subscribe-621"><a href="#Client.subscribe-621"><span class="linenos">621</span></a> <span class="n">pattern_auto_discovery_period</span><span class="o">=</span><span class="mi">60</span><span class="p">,</span>
</span><span id="Client.subscribe-622"><a href="#Client.subscribe-622"><span class="linenos">622</span></a> <span class="n">initial_position</span><span class="o">=</span><span class="n">InitialPosition</span><span class="o">.</span><span class="n">Latest</span><span class="p">,</span>
</span><span id="Client.subscribe-623"><a href="#Client.subscribe-623"><span class="linenos">623</span></a> <span class="n">crypto_key_reader</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
</span><span id="Client.subscribe-624"><a href="#Client.subscribe-624"><span class="linenos">624</span></a> <span class="n">replicate_subscription_state_enabled</span><span class="o">=</span><span class="kc">False</span>
</span><span id="Client.subscribe-625"><a href="#Client.subscribe-625"><span class="linenos">625</span></a> <span class="p">):</span>
</span><span id="Client.subscribe-626"><a href="#Client.subscribe-626"><span class="linenos">626</span></a> <span class="sd">&quot;&quot;&quot;</span>
</span><span id="Client.subscribe-627"><a href="#Client.subscribe-627"><span class="linenos">627</span></a><span class="sd"> Subscribe to the given topic and subscription combination.</span>
</span><span id="Client.subscribe-628"><a href="#Client.subscribe-628"><span class="linenos">628</span></a>
</span><span id="Client.subscribe-629"><a href="#Client.subscribe-629"><span class="linenos">629</span></a><span class="sd"> **Args**</span>
</span><span id="Client.subscribe-630"><a href="#Client.subscribe-630"><span class="linenos">630</span></a>
</span><span id="Client.subscribe-631"><a href="#Client.subscribe-631"><span class="linenos">631</span></a><span class="sd"> * `topic`: The name of the topic, list of topics or regex pattern.</span>
</span><span id="Client.subscribe-632"><a href="#Client.subscribe-632"><span class="linenos">632</span></a><span class="sd"> This method will accept these forms:</span>
</span><span id="Client.subscribe-633"><a href="#Client.subscribe-633"><span class="linenos">633</span></a><span class="sd"> - `topic=&#39;my-topic&#39;`</span>
</span><span id="Client.subscribe-634"><a href="#Client.subscribe-634"><span class="linenos">634</span></a><span class="sd"> - `topic=[&#39;topic-1&#39;, &#39;topic-2&#39;, &#39;topic-3&#39;]`</span>
</span><span id="Client.subscribe-635"><a href="#Client.subscribe-635"><span class="linenos">635</span></a><span class="sd"> - `topic=re.compile(&#39;persistent://public/default/topic-*&#39;)`</span>
</span><span id="Client.subscribe-636"><a href="#Client.subscribe-636"><span class="linenos">636</span></a><span class="sd"> * `subscription`: The name of the subscription.</span>
</span><span id="Client.subscribe-637"><a href="#Client.subscribe-637"><span class="linenos">637</span></a>
</span><span id="Client.subscribe-638"><a href="#Client.subscribe-638"><span class="linenos">638</span></a><span class="sd"> **Options**</span>
</span><span id="Client.subscribe-639"><a href="#Client.subscribe-639"><span class="linenos">639</span></a>
</span><span id="Client.subscribe-640"><a href="#Client.subscribe-640"><span class="linenos">640</span></a><span class="sd"> * `consumer_type`:</span>
</span><span id="Client.subscribe-641"><a href="#Client.subscribe-641"><span class="linenos">641</span></a><span class="sd"> Select the subscription type to be used when subscribing to the topic.</span>
</span><span id="Client.subscribe-642"><a href="#Client.subscribe-642"><span class="linenos">642</span></a><span class="sd"> * `schema`:</span>
</span><span id="Client.subscribe-643"><a href="#Client.subscribe-643"><span class="linenos">643</span></a><span class="sd"> Define the schema of the data that will be received by this consumer.</span>
</span><span id="Client.subscribe-644"><a href="#Client.subscribe-644"><span class="linenos">644</span></a><span class="sd"> * `message_listener`:</span>
</span><span id="Client.subscribe-645"><a href="#Client.subscribe-645"><span class="linenos">645</span></a><span class="sd"> Sets a message listener for the consumer. When the listener is set,</span>
</span><span id="Client.subscribe-646"><a href="#Client.subscribe-646"><span class="linenos">646</span></a><span class="sd"> the application will receive messages through it. Calls to</span>
</span><span id="Client.subscribe-647"><a href="#Client.subscribe-647"><span class="linenos">647</span></a><span class="sd"> `consumer.receive()` will not be allowed. The listener function needs</span>
</span><span id="Client.subscribe-648"><a href="#Client.subscribe-648"><span class="linenos">648</span></a><span class="sd"> to accept (consumer, message), for example:</span>
</span><span id="Client.subscribe-649"><a href="#Client.subscribe-649"><span class="linenos">649</span></a>
</span><span id="Client.subscribe-650"><a href="#Client.subscribe-650"><span class="linenos">650</span></a><span class="sd"> #!python</span>
</span><span id="Client.subscribe-651"><a href="#Client.subscribe-651"><span class="linenos">651</span></a><span class="sd"> def my_listener(consumer, message):</span>
</span><span id="Client.subscribe-652"><a href="#Client.subscribe-652"><span class="linenos">652</span></a><span class="sd"> # process message</span>
</span><span id="Client.subscribe-653"><a href="#Client.subscribe-653"><span class="linenos">653</span></a><span class="sd"> consumer.acknowledge(message)</span>
</span><span id="Client.subscribe-654"><a href="#Client.subscribe-654"><span class="linenos">654</span></a>
</span><span id="Client.subscribe-655"><a href="#Client.subscribe-655"><span class="linenos">655</span></a><span class="sd"> * `receiver_queue_size`:</span>
</span><span id="Client.subscribe-656"><a href="#Client.subscribe-656"><span class="linenos">656</span></a><span class="sd"> Sets the size of the consumer receive queue. The consumer receive</span>
</span><span id="Client.subscribe-657"><a href="#Client.subscribe-657"><span class="linenos">657</span></a><span class="sd"> queue controls how many messages can be accumulated by the consumer</span>
</span><span id="Client.subscribe-658"><a href="#Client.subscribe-658"><span class="linenos">658</span></a><span class="sd"> before the application calls `receive()`. Using a higher value could</span>
</span><span id="Client.subscribe-659"><a href="#Client.subscribe-659"><span class="linenos">659</span></a><span class="sd"> potentially increase the consumer throughput at the expense of higher</span>
</span><span id="Client.subscribe-660"><a href="#Client.subscribe-660"><span class="linenos">660</span></a><span class="sd"> memory utilization. Setting the consumer queue size to zero decreases</span>
</span><span id="Client.subscribe-661"><a href="#Client.subscribe-661"><span class="linenos">661</span></a><span class="sd"> the throughput of the consumer by disabling pre-fetching of messages.</span>
</span><span id="Client.subscribe-662"><a href="#Client.subscribe-662"><span class="linenos">662</span></a><span class="sd"> This approach improves the message distribution on shared subscription</span>
</span><span id="Client.subscribe-663"><a href="#Client.subscribe-663"><span class="linenos">663</span></a><span class="sd"> by pushing messages only to those consumers that are ready to process</span>
</span><span id="Client.subscribe-664"><a href="#Client.subscribe-664"><span class="linenos">664</span></a><span class="sd"> them. Neither receive with timeout nor partitioned topics can be used</span>
</span><span id="Client.subscribe-665"><a href="#Client.subscribe-665"><span class="linenos">665</span></a><span class="sd"> if the consumer queue size is zero. The `receive()` function call</span>
</span><span id="Client.subscribe-666"><a href="#Client.subscribe-666"><span class="linenos">666</span></a><span class="sd"> should not be interrupted when the consumer queue size is zero. The</span>
</span><span id="Client.subscribe-667"><a href="#Client.subscribe-667"><span class="linenos">667</span></a><span class="sd"> default value is 1000 messages and should work well for most use</span>
</span><span id="Client.subscribe-668"><a href="#Client.subscribe-668"><span class="linenos">668</span></a><span class="sd"> cases.</span>
</span><span id="Client.subscribe-669"><a href="#Client.subscribe-669"><span class="linenos">669</span></a><span class="sd"> * `max_total_receiver_queue_size_across_partitions`</span>
</span><span id="Client.subscribe-670"><a href="#Client.subscribe-670"><span class="linenos">670</span></a><span class="sd"> Set the max total receiver queue size across partitions.</span>
</span><span id="Client.subscribe-671"><a href="#Client.subscribe-671"><span class="linenos">671</span></a><span class="sd"> This setting will be used to reduce the receiver queue size for individual partitions</span>
</span><span id="Client.subscribe-672"><a href="#Client.subscribe-672"><span class="linenos">672</span></a><span class="sd"> * `consumer_name`:</span>
</span><span id="Client.subscribe-673"><a href="#Client.subscribe-673"><span class="linenos">673</span></a><span class="sd"> Sets the consumer name.</span>
</span><span id="Client.subscribe-674"><a href="#Client.subscribe-674"><span class="linenos">674</span></a><span class="sd"> * `unacked_messages_timeout_ms`:</span>
</span><span id="Client.subscribe-675"><a href="#Client.subscribe-675"><span class="linenos">675</span></a><span class="sd"> Sets the timeout in milliseconds for unacknowledged messages. The</span>
</span><span id="Client.subscribe-676"><a href="#Client.subscribe-676"><span class="linenos">676</span></a><span class="sd"> timeout needs to be greater than 10 seconds. An exception is thrown if</span>
</span><span id="Client.subscribe-677"><a href="#Client.subscribe-677"><span class="linenos">677</span></a><span class="sd"> the given value is less than 10 seconds. If a successful</span>
</span><span id="Client.subscribe-678"><a href="#Client.subscribe-678"><span class="linenos">678</span></a><span class="sd"> acknowledgement is not sent within the timeout, all the unacknowledged</span>
</span><span id="Client.subscribe-679"><a href="#Client.subscribe-679"><span class="linenos">679</span></a><span class="sd"> messages are redelivered.</span>
</span><span id="Client.subscribe-680"><a href="#Client.subscribe-680"><span class="linenos">680</span></a><span class="sd"> * `negative_ack_redelivery_delay_ms`:</span>
</span><span id="Client.subscribe-681"><a href="#Client.subscribe-681"><span class="linenos">681</span></a><span class="sd"> The delay after which to redeliver the messages that failed to be</span>
</span><span id="Client.subscribe-682"><a href="#Client.subscribe-682"><span class="linenos">682</span></a><span class="sd"> processed (with the `consumer.negative_acknowledge()`)</span>
</span><span id="Client.subscribe-683"><a href="#Client.subscribe-683"><span class="linenos">683</span></a><span class="sd"> * `broker_consumer_stats_cache_time_ms`:</span>
</span><span id="Client.subscribe-684"><a href="#Client.subscribe-684"><span class="linenos">684</span></a><span class="sd"> Sets the time duration for which the broker-side consumer stats will</span>
</span><span id="Client.subscribe-685"><a href="#Client.subscribe-685"><span class="linenos">685</span></a><span class="sd"> be cached in the client.</span>
</span><span id="Client.subscribe-686"><a href="#Client.subscribe-686"><span class="linenos">686</span></a><span class="sd"> * `is_read_compacted`:</span>
</span><span id="Client.subscribe-687"><a href="#Client.subscribe-687"><span class="linenos">687</span></a><span class="sd"> Selects whether to read the compacted version of the topic</span>
</span><span id="Client.subscribe-688"><a href="#Client.subscribe-688"><span class="linenos">688</span></a><span class="sd"> * `properties`:</span>
</span><span id="Client.subscribe-689"><a href="#Client.subscribe-689"><span class="linenos">689</span></a><span class="sd"> Sets the properties for the consumer. The properties associated with a consumer</span>
</span><span id="Client.subscribe-690"><a href="#Client.subscribe-690"><span class="linenos">690</span></a><span class="sd"> can be used for identify a consumer at broker side.</span>
</span><span id="Client.subscribe-691"><a href="#Client.subscribe-691"><span class="linenos">691</span></a><span class="sd"> * `pattern_auto_discovery_period`:</span>
</span><span id="Client.subscribe-692"><a href="#Client.subscribe-692"><span class="linenos">692</span></a><span class="sd"> Periods of seconds for consumer to auto discover match topics.</span>
</span><span id="Client.subscribe-693"><a href="#Client.subscribe-693"><span class="linenos">693</span></a><span class="sd"> * `initial_position`:</span>
</span><span id="Client.subscribe-694"><a href="#Client.subscribe-694"><span class="linenos">694</span></a><span class="sd"> Set the initial position of a consumer when subscribing to the topic.</span>
</span><span id="Client.subscribe-695"><a href="#Client.subscribe-695"><span class="linenos">695</span></a><span class="sd"> It could be either: `InitialPosition.Earliest` or `InitialPosition.Latest`.</span>
</span><span id="Client.subscribe-696"><a href="#Client.subscribe-696"><span class="linenos">696</span></a><span class="sd"> Default: `Latest`.</span>
</span><span id="Client.subscribe-697"><a href="#Client.subscribe-697"><span class="linenos">697</span></a><span class="sd"> * crypto_key_reader:</span>
</span><span id="Client.subscribe-698"><a href="#Client.subscribe-698"><span class="linenos">698</span></a><span class="sd"> Symmetric encryption class implementation, configuring public key encryption messages for the producer</span>
</span><span id="Client.subscribe-699"><a href="#Client.subscribe-699"><span class="linenos">699</span></a><span class="sd"> and private key decryption messages for the consumer</span>
</span><span id="Client.subscribe-700"><a href="#Client.subscribe-700"><span class="linenos">700</span></a><span class="sd"> * replicate_subscription_state_enabled:</span>
</span><span id="Client.subscribe-701"><a href="#Client.subscribe-701"><span class="linenos">701</span></a><span class="sd"> Set whether the subscription status should be replicated.</span>
</span><span id="Client.subscribe-702"><a href="#Client.subscribe-702"><span class="linenos">702</span></a><span class="sd"> Default: `False`.</span>
</span><span id="Client.subscribe-703"><a href="#Client.subscribe-703"><span class="linenos">703</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="Client.subscribe-704"><a href="#Client.subscribe-704"><span class="linenos">704</span></a> <span class="n">_check_type</span><span class="p">(</span><span class="nb">str</span><span class="p">,</span> <span class="n">subscription_name</span><span class="p">,</span> <span class="s1">&#39;subscription_name&#39;</span><span class="p">)</span>
</span><span id="Client.subscribe-705"><a href="#Client.subscribe-705"><span class="linenos">705</span></a> <span class="n">_check_type</span><span class="p">(</span><span class="n">ConsumerType</span><span class="p">,</span> <span class="n">consumer_type</span><span class="p">,</span> <span class="s1">&#39;consumer_type&#39;</span><span class="p">)</span>
</span><span id="Client.subscribe-706"><a href="#Client.subscribe-706"><span class="linenos">706</span></a> <span class="n">_check_type</span><span class="p">(</span><span class="n">_schema</span><span class="o">.</span><span class="n">Schema</span><span class="p">,</span> <span class="n">schema</span><span class="p">,</span> <span class="s1">&#39;schema&#39;</span><span class="p">)</span>
</span><span id="Client.subscribe-707"><a href="#Client.subscribe-707"><span class="linenos">707</span></a> <span class="n">_check_type</span><span class="p">(</span><span class="nb">int</span><span class="p">,</span> <span class="n">receiver_queue_size</span><span class="p">,</span> <span class="s1">&#39;receiver_queue_size&#39;</span><span class="p">)</span>
</span><span id="Client.subscribe-708"><a href="#Client.subscribe-708"><span class="linenos">708</span></a> <span class="n">_check_type</span><span class="p">(</span><span class="nb">int</span><span class="p">,</span> <span class="n">max_total_receiver_queue_size_across_partitions</span><span class="p">,</span>
</span><span id="Client.subscribe-709"><a href="#Client.subscribe-709"><span class="linenos">709</span></a> <span class="s1">&#39;max_total_receiver_queue_size_across_partitions&#39;</span><span class="p">)</span>
</span><span id="Client.subscribe-710"><a href="#Client.subscribe-710"><span class="linenos">710</span></a> <span class="n">_check_type_or_none</span><span class="p">(</span><span class="nb">str</span><span class="p">,</span> <span class="n">consumer_name</span><span class="p">,</span> <span class="s1">&#39;consumer_name&#39;</span><span class="p">)</span>
</span><span id="Client.subscribe-711"><a href="#Client.subscribe-711"><span class="linenos">711</span></a> <span class="n">_check_type_or_none</span><span class="p">(</span><span class="nb">int</span><span class="p">,</span> <span class="n">unacked_messages_timeout_ms</span><span class="p">,</span> <span class="s1">&#39;unacked_messages_timeout_ms&#39;</span><span class="p">)</span>
</span><span id="Client.subscribe-712"><a href="#Client.subscribe-712"><span class="linenos">712</span></a> <span class="n">_check_type</span><span class="p">(</span><span class="nb">int</span><span class="p">,</span> <span class="n">broker_consumer_stats_cache_time_ms</span><span class="p">,</span> <span class="s1">&#39;broker_consumer_stats_cache_time_ms&#39;</span><span class="p">)</span>
</span><span id="Client.subscribe-713"><a href="#Client.subscribe-713"><span class="linenos">713</span></a> <span class="n">_check_type</span><span class="p">(</span><span class="nb">int</span><span class="p">,</span> <span class="n">negative_ack_redelivery_delay_ms</span><span class="p">,</span> <span class="s1">&#39;negative_ack_redelivery_delay_ms&#39;</span><span class="p">)</span>
</span><span id="Client.subscribe-714"><a href="#Client.subscribe-714"><span class="linenos">714</span></a> <span class="n">_check_type</span><span class="p">(</span><span class="nb">int</span><span class="p">,</span> <span class="n">pattern_auto_discovery_period</span><span class="p">,</span> <span class="s1">&#39;pattern_auto_discovery_period&#39;</span><span class="p">)</span>
</span><span id="Client.subscribe-715"><a href="#Client.subscribe-715"><span class="linenos">715</span></a> <span class="n">_check_type</span><span class="p">(</span><span class="nb">bool</span><span class="p">,</span> <span class="n">is_read_compacted</span><span class="p">,</span> <span class="s1">&#39;is_read_compacted&#39;</span><span class="p">)</span>
</span><span id="Client.subscribe-716"><a href="#Client.subscribe-716"><span class="linenos">716</span></a> <span class="n">_check_type_or_none</span><span class="p">(</span><span class="nb">dict</span><span class="p">,</span> <span class="n">properties</span><span class="p">,</span> <span class="s1">&#39;properties&#39;</span><span class="p">)</span>
</span><span id="Client.subscribe-717"><a href="#Client.subscribe-717"><span class="linenos">717</span></a> <span class="n">_check_type</span><span class="p">(</span><span class="n">InitialPosition</span><span class="p">,</span> <span class="n">initial_position</span><span class="p">,</span> <span class="s1">&#39;initial_position&#39;</span><span class="p">)</span>
</span><span id="Client.subscribe-718"><a href="#Client.subscribe-718"><span class="linenos">718</span></a> <span class="n">_check_type_or_none</span><span class="p">(</span><span class="n">CryptoKeyReader</span><span class="p">,</span> <span class="n">crypto_key_reader</span><span class="p">,</span> <span class="s1">&#39;crypto_key_reader&#39;</span><span class="p">)</span>
</span><span id="Client.subscribe-719"><a href="#Client.subscribe-719"><span class="linenos">719</span></a>
</span><span id="Client.subscribe-720"><a href="#Client.subscribe-720"><span class="linenos">720</span></a> <span class="n">conf</span> <span class="o">=</span> <span class="n">_pulsar</span><span class="o">.</span><span class="n">ConsumerConfiguration</span><span class="p">()</span>
</span><span id="Client.subscribe-721"><a href="#Client.subscribe-721"><span class="linenos">721</span></a> <span class="n">conf</span><span class="o">.</span><span class="n">consumer_type</span><span class="p">(</span><span class="n">consumer_type</span><span class="p">)</span>
</span><span id="Client.subscribe-722"><a href="#Client.subscribe-722"><span class="linenos">722</span></a> <span class="n">conf</span><span class="o">.</span><span class="n">read_compacted</span><span class="p">(</span><span class="n">is_read_compacted</span><span class="p">)</span>
</span><span id="Client.subscribe-723"><a href="#Client.subscribe-723"><span class="linenos">723</span></a> <span class="k">if</span> <span class="n">message_listener</span><span class="p">:</span>
</span><span id="Client.subscribe-724"><a href="#Client.subscribe-724"><span class="linenos">724</span></a> <span class="n">conf</span><span class="o">.</span><span class="n">message_listener</span><span class="p">(</span><span class="n">_listener_wrapper</span><span class="p">(</span><span class="n">message_listener</span><span class="p">,</span> <span class="n">schema</span><span class="p">))</span>
</span><span id="Client.subscribe-725"><a href="#Client.subscribe-725"><span class="linenos">725</span></a> <span class="n">conf</span><span class="o">.</span><span class="n">receiver_queue_size</span><span class="p">(</span><span class="n">receiver_queue_size</span><span class="p">)</span>
</span><span id="Client.subscribe-726"><a href="#Client.subscribe-726"><span class="linenos">726</span></a> <span class="n">conf</span><span class="o">.</span><span class="n">max_total_receiver_queue_size_across_partitions</span><span class="p">(</span><span class="n">max_total_receiver_queue_size_across_partitions</span><span class="p">)</span>
</span><span id="Client.subscribe-727"><a href="#Client.subscribe-727"><span class="linenos">727</span></a> <span class="k">if</span> <span class="n">consumer_name</span><span class="p">:</span>
</span><span id="Client.subscribe-728"><a href="#Client.subscribe-728"><span class="linenos">728</span></a> <span class="n">conf</span><span class="o">.</span><span class="n">consumer_name</span><span class="p">(</span><span class="n">consumer_name</span><span class="p">)</span>
</span><span id="Client.subscribe-729"><a href="#Client.subscribe-729"><span class="linenos">729</span></a> <span class="k">if</span> <span class="n">unacked_messages_timeout_ms</span><span class="p">:</span>
</span><span id="Client.subscribe-730"><a href="#Client.subscribe-730"><span class="linenos">730</span></a> <span class="n">conf</span><span class="o">.</span><span class="n">unacked_messages_timeout_ms</span><span class="p">(</span><span class="n">unacked_messages_timeout_ms</span><span class="p">)</span>
</span><span id="Client.subscribe-731"><a href="#Client.subscribe-731"><span class="linenos">731</span></a>
</span><span id="Client.subscribe-732"><a href="#Client.subscribe-732"><span class="linenos">732</span></a> <span class="n">conf</span><span class="o">.</span><span class="n">negative_ack_redelivery_delay_ms</span><span class="p">(</span><span class="n">negative_ack_redelivery_delay_ms</span><span class="p">)</span>
</span><span id="Client.subscribe-733"><a href="#Client.subscribe-733"><span class="linenos">733</span></a> <span class="n">conf</span><span class="o">.</span><span class="n">broker_consumer_stats_cache_time_ms</span><span class="p">(</span><span class="n">broker_consumer_stats_cache_time_ms</span><span class="p">)</span>
</span><span id="Client.subscribe-734"><a href="#Client.subscribe-734"><span class="linenos">734</span></a> <span class="k">if</span> <span class="n">properties</span><span class="p">:</span>
</span><span id="Client.subscribe-735"><a href="#Client.subscribe-735"><span class="linenos">735</span></a> <span class="k">for</span> <span class="n">k</span><span class="p">,</span> <span class="n">v</span> <span class="ow">in</span> <span class="n">properties</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
</span><span id="Client.subscribe-736"><a href="#Client.subscribe-736"><span class="linenos">736</span></a> <span class="n">conf</span><span class="o">.</span><span class="n">property</span><span class="p">(</span><span class="n">k</span><span class="p">,</span> <span class="n">v</span><span class="p">)</span>
</span><span id="Client.subscribe-737"><a href="#Client.subscribe-737"><span class="linenos">737</span></a> <span class="n">conf</span><span class="o">.</span><span class="n">subscription_initial_position</span><span class="p">(</span><span class="n">initial_position</span><span class="p">)</span>
</span><span id="Client.subscribe-738"><a href="#Client.subscribe-738"><span class="linenos">738</span></a>
</span><span id="Client.subscribe-739"><a href="#Client.subscribe-739"><span class="linenos">739</span></a> <span class="n">conf</span><span class="o">.</span><span class="n">schema</span><span class="p">(</span><span class="n">schema</span><span class="o">.</span><span class="n">schema_info</span><span class="p">())</span>
</span><span id="Client.subscribe-740"><a href="#Client.subscribe-740"><span class="linenos">740</span></a>
</span><span id="Client.subscribe-741"><a href="#Client.subscribe-741"><span class="linenos">741</span></a> <span class="k">if</span> <span class="n">crypto_key_reader</span><span class="p">:</span>
</span><span id="Client.subscribe-742"><a href="#Client.subscribe-742"><span class="linenos">742</span></a> <span class="n">conf</span><span class="o">.</span><span class="n">crypto_key_reader</span><span class="p">(</span><span class="n">crypto_key_reader</span><span class="o">.</span><span class="n">cryptoKeyReader</span><span class="p">)</span>
</span><span id="Client.subscribe-743"><a href="#Client.subscribe-743"><span class="linenos">743</span></a>
</span><span id="Client.subscribe-744"><a href="#Client.subscribe-744"><span class="linenos">744</span></a> <span class="n">conf</span><span class="o">.</span><span class="n">replicate_subscription_state_enabled</span><span class="p">(</span><span class="n">replicate_subscription_state_enabled</span><span class="p">)</span>
</span><span id="Client.subscribe-745"><a href="#Client.subscribe-745"><span class="linenos">745</span></a>
</span><span id="Client.subscribe-746"><a href="#Client.subscribe-746"><span class="linenos">746</span></a> <span class="n">c</span> <span class="o">=</span> <span class="n">Consumer</span><span class="p">()</span>
</span><span id="Client.subscribe-747"><a href="#Client.subscribe-747"><span class="linenos">747</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">topic</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span>
</span><span id="Client.subscribe-748"><a href="#Client.subscribe-748"><span class="linenos">748</span></a> <span class="c1"># Single topic</span>
</span><span id="Client.subscribe-749"><a href="#Client.subscribe-749"><span class="linenos">749</span></a> <span class="n">c</span><span class="o">.</span><span class="n">_consumer</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_client</span><span class="o">.</span><span class="n">subscribe</span><span class="p">(</span><span class="n">topic</span><span class="p">,</span> <span class="n">subscription_name</span><span class="p">,</span> <span class="n">conf</span><span class="p">)</span>
</span><span id="Client.subscribe-750"><a href="#Client.subscribe-750"><span class="linenos">750</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">topic</span><span class="p">,</span> <span class="nb">list</span><span class="p">):</span>
</span><span id="Client.subscribe-751"><a href="#Client.subscribe-751"><span class="linenos">751</span></a> <span class="c1"># List of topics</span>
</span><span id="Client.subscribe-752"><a href="#Client.subscribe-752"><span class="linenos">752</span></a> <span class="n">c</span><span class="o">.</span><span class="n">_consumer</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_client</span><span class="o">.</span><span class="n">subscribe_topics</span><span class="p">(</span><span class="n">topic</span><span class="p">,</span> <span class="n">subscription_name</span><span class="p">,</span> <span class="n">conf</span><span class="p">)</span>
</span><span id="Client.subscribe-753"><a href="#Client.subscribe-753"><span class="linenos">753</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">topic</span><span class="p">,</span> <span class="n">_retype</span><span class="p">):</span>
</span><span id="Client.subscribe-754"><a href="#Client.subscribe-754"><span class="linenos">754</span></a> <span class="c1"># Regex pattern</span>
</span><span id="Client.subscribe-755"><a href="#Client.subscribe-755"><span class="linenos">755</span></a> <span class="n">c</span><span class="o">.</span><span class="n">_consumer</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_client</span><span class="o">.</span><span class="n">subscribe_pattern</span><span class="p">(</span><span class="n">topic</span><span class="o">.</span><span class="n">pattern</span><span class="p">,</span> <span class="n">subscription_name</span><span class="p">,</span> <span class="n">conf</span><span class="p">)</span>
</span><span id="Client.subscribe-756"><a href="#Client.subscribe-756"><span class="linenos">756</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="Client.subscribe-757"><a href="#Client.subscribe-757"><span class="linenos">757</span></a> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">&quot;Argument &#39;topic&#39; is expected to be of a type between (str, list, re.pattern)&quot;</span><span class="p">)</span>
</span><span id="Client.subscribe-758"><a href="#Client.subscribe-758"><span class="linenos">758</span></a>
</span><span id="Client.subscribe-759"><a href="#Client.subscribe-759"><span class="linenos">759</span></a> <span class="n">c</span><span class="o">.</span><span class="n">_client</span> <span class="o">=</span> <span class="bp">self</span>
</span><span id="Client.subscribe-760"><a href="#Client.subscribe-760"><span class="linenos">760</span></a> <span class="n">c</span><span class="o">.</span><span class="n">_schema</span> <span class="o">=</span> <span class="n">schema</span>
</span><span id="Client.subscribe-761"><a href="#Client.subscribe-761"><span class="linenos">761</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_consumers</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">c</span><span class="p">)</span>
</span><span id="Client.subscribe-762"><a href="#Client.subscribe-762"><span class="linenos">762</span></a> <span class="k">return</span> <span class="n">c</span>
</span></pre></div>
<div class="docstring"><p>Subscribe to the given topic and subscription combination.</p>
<p><strong>Args</strong></p>
<ul>
<li><code>topic</code>: The name of the topic, list of topics or regex pattern.
This method will accept these forms:
<ul>
<li><code>topic='my-topic'</code></li>
<li><code>topic=['topic-1', 'topic-2', 'topic-3']</code></li>
<li><code>topic=re.compile('persistent://public/default/topic-*')</code></li>
</ul></li>
<li><code>subscription</code>: The name of the subscription.</li>
</ul>
<p><strong>Options</strong></p>
<ul>
<li><code>consumer_type</code>:
Select the subscription type to be used when subscribing to the topic.</li>
<li><code>schema</code>:
Define the schema of the data that will be received by this consumer.</li>
<li><p><code>message_listener</code>:
Sets a message listener for the consumer. When the listener is set,
the application will receive messages through it. Calls to
<code>consumer.receive()</code> will not be allowed. The listener function needs
to accept (consumer, message), for example:</p>
<pre><code>#!python
def my_listener(consumer, message):
# process message
consumer.acknowledge(message)
</code></pre></li>
<li><p><code>receiver_queue_size</code>:
Sets the size of the consumer receive queue. The consumer receive
queue controls how many messages can be accumulated by the consumer
before the application calls <code>receive()</code>. Using a higher value could
potentially increase the consumer throughput at the expense of higher
memory utilization. Setting the consumer queue size to zero decreases
the throughput of the consumer by disabling pre-fetching of messages.
This approach improves the message distribution on shared subscription
by pushing messages only to those consumers that are ready to process
them. Neither receive with timeout nor partitioned topics can be used
if the consumer queue size is zero. The <code>receive()</code> function call
should not be interrupted when the consumer queue size is zero. The
default value is 1000 messages and should work well for most use
cases.</p></li>
<li><code>max_total_receiver_queue_size_across_partitions</code>
Set the max total receiver queue size across partitions.
This setting will be used to reduce the receiver queue size for individual partitions</li>
<li><code>consumer_name</code>:
Sets the consumer name.</li>
<li><code>unacked_messages_timeout_ms</code>:
Sets the timeout in milliseconds for unacknowledged messages. The
timeout needs to be greater than 10 seconds. An exception is thrown if
the given value is less than 10 seconds. If a successful
acknowledgement is not sent within the timeout, all the unacknowledged
messages are redelivered.</li>
<li><code>negative_ack_redelivery_delay_ms</code>:
The delay after which to redeliver the messages that failed to be
processed (with the <code>consumer.negative_acknowledge()</code>)</li>
<li><code>broker_consumer_stats_cache_time_ms</code>:
Sets the time duration for which the broker-side consumer stats will
be cached in the client.</li>
<li><code>is_read_compacted</code>:
Selects whether to read the compacted version of the topic</li>
<li><code>properties</code>:
Sets the properties for the consumer. The properties associated with a consumer
can be used for identify a consumer at broker side.</li>
<li><code>pattern_auto_discovery_period</code>:
Periods of seconds for consumer to auto discover match topics.</li>
<li><code>initial_position</code>:
Set the initial position of a consumer when subscribing to the topic.
It could be either: <code>InitialPosition.Earliest</code> or <code>InitialPosition.Latest</code>.
Default: <code>Latest</code>.</li>
<li>crypto_key_reader:
Symmetric encryption class implementation, configuring public key encryption messages for the producer
and private key decryption messages for the consumer</li>
<li>replicate_subscription_state_enabled:
Set whether the subscription status should be replicated.
Default: <code>False</code>.</li>
</ul>
</div>
</div>
<div id="Client.create_reader" class="classattr">
<input id="Client.create_reader-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<div class="attr function">
<span class="def">def</span>
<span class="name">create_reader</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="bp">self</span>,</span><span class="param"> <span class="n">topic</span>,</span><span class="param"> <span class="n">start_message_id</span>,</span><span class="param"> <span class="n">schema</span><span class="o">=&lt;</span><span class="n"><a href="pulsar/schema/schema.html#BytesSchema">pulsar.schema.schema.BytesSchema</a></span> <span class="nb">object</span><span class="o">&gt;</span>,</span><span class="param"> <span class="n">reader_listener</span><span class="o">=</span><span class="kc">None</span>,</span><span class="param"> <span class="n">receiver_queue_size</span><span class="o">=</span><span class="mi">1000</span>,</span><span class="param"> <span class="n">reader_name</span><span class="o">=</span><span class="kc">None</span>,</span><span class="param"> <span class="n">subscription_role_prefix</span><span class="o">=</span><span class="kc">None</span>,</span><span class="param"> <span class="n">is_read_compacted</span><span class="o">=</span><span class="kc">False</span>,</span><span class="param"> <span class="n">crypto_key_reader</span><span class="o">=</span><span class="kc">None</span></span><span class="return-annotation">):</span></span>
<label class="view-source-button" for="Client.create_reader-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#Client.create_reader"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="Client.create_reader-764"><a href="#Client.create_reader-764"><span class="linenos">764</span></a> <span class="k">def</span> <span class="nf">create_reader</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">topic</span><span class="p">,</span> <span class="n">start_message_id</span><span class="p">,</span>
</span><span id="Client.create_reader-765"><a href="#Client.create_reader-765"><span class="linenos">765</span></a> <span class="n">schema</span><span class="o">=</span><span class="n">schema</span><span class="o">.</span><span class="n">BytesSchema</span><span class="p">(),</span>
</span><span id="Client.create_reader-766"><a href="#Client.create_reader-766"><span class="linenos">766</span></a> <span class="n">reader_listener</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
</span><span id="Client.create_reader-767"><a href="#Client.create_reader-767"><span class="linenos">767</span></a> <span class="n">receiver_queue_size</span><span class="o">=</span><span class="mi">1000</span><span class="p">,</span>
</span><span id="Client.create_reader-768"><a href="#Client.create_reader-768"><span class="linenos">768</span></a> <span class="n">reader_name</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
</span><span id="Client.create_reader-769"><a href="#Client.create_reader-769"><span class="linenos">769</span></a> <span class="n">subscription_role_prefix</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
</span><span id="Client.create_reader-770"><a href="#Client.create_reader-770"><span class="linenos">770</span></a> <span class="n">is_read_compacted</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
</span><span id="Client.create_reader-771"><a href="#Client.create_reader-771"><span class="linenos">771</span></a> <span class="n">crypto_key_reader</span><span class="o">=</span><span class="kc">None</span>
</span><span id="Client.create_reader-772"><a href="#Client.create_reader-772"><span class="linenos">772</span></a> <span class="p">):</span>
</span><span id="Client.create_reader-773"><a href="#Client.create_reader-773"><span class="linenos">773</span></a> <span class="sd">&quot;&quot;&quot;</span>
</span><span id="Client.create_reader-774"><a href="#Client.create_reader-774"><span class="linenos">774</span></a><span class="sd"> Create a reader on a particular topic</span>
</span><span id="Client.create_reader-775"><a href="#Client.create_reader-775"><span class="linenos">775</span></a>
</span><span id="Client.create_reader-776"><a href="#Client.create_reader-776"><span class="linenos">776</span></a><span class="sd"> **Args**</span>
</span><span id="Client.create_reader-777"><a href="#Client.create_reader-777"><span class="linenos">777</span></a>
</span><span id="Client.create_reader-778"><a href="#Client.create_reader-778"><span class="linenos">778</span></a><span class="sd"> * `topic`: The name of the topic.</span>
</span><span id="Client.create_reader-779"><a href="#Client.create_reader-779"><span class="linenos">779</span></a><span class="sd"> * `start_message_id`: The initial reader positioning is done by specifying a message id.</span>
</span><span id="Client.create_reader-780"><a href="#Client.create_reader-780"><span class="linenos">780</span></a><span class="sd"> The options are:</span>
</span><span id="Client.create_reader-781"><a href="#Client.create_reader-781"><span class="linenos">781</span></a><span class="sd"> * `MessageId.earliest`: Start reading from the earliest message available in the topic</span>
</span><span id="Client.create_reader-782"><a href="#Client.create_reader-782"><span class="linenos">782</span></a><span class="sd"> * `MessageId.latest`: Start reading from the end topic, only getting messages published</span>
</span><span id="Client.create_reader-783"><a href="#Client.create_reader-783"><span class="linenos">783</span></a><span class="sd"> after the reader was created</span>
</span><span id="Client.create_reader-784"><a href="#Client.create_reader-784"><span class="linenos">784</span></a><span class="sd"> * `MessageId`: When passing a particular message id, the reader will position itself on</span>
</span><span id="Client.create_reader-785"><a href="#Client.create_reader-785"><span class="linenos">785</span></a><span class="sd"> that specific position. The first message to be read will be the message next to the</span>
</span><span id="Client.create_reader-786"><a href="#Client.create_reader-786"><span class="linenos">786</span></a><span class="sd"> specified messageId. Message id can be serialized into a string and deserialized</span>
</span><span id="Client.create_reader-787"><a href="#Client.create_reader-787"><span class="linenos">787</span></a><span class="sd"> back into a `MessageId` object:</span>
</span><span id="Client.create_reader-788"><a href="#Client.create_reader-788"><span class="linenos">788</span></a>
</span><span id="Client.create_reader-789"><a href="#Client.create_reader-789"><span class="linenos">789</span></a><span class="sd"> # Serialize to string</span>
</span><span id="Client.create_reader-790"><a href="#Client.create_reader-790"><span class="linenos">790</span></a><span class="sd"> s = msg.message_id().serialize()</span>
</span><span id="Client.create_reader-791"><a href="#Client.create_reader-791"><span class="linenos">791</span></a>
</span><span id="Client.create_reader-792"><a href="#Client.create_reader-792"><span class="linenos">792</span></a><span class="sd"> # Deserialize from string</span>
</span><span id="Client.create_reader-793"><a href="#Client.create_reader-793"><span class="linenos">793</span></a><span class="sd"> msg_id = MessageId.deserialize(s)</span>
</span><span id="Client.create_reader-794"><a href="#Client.create_reader-794"><span class="linenos">794</span></a>
</span><span id="Client.create_reader-795"><a href="#Client.create_reader-795"><span class="linenos">795</span></a><span class="sd"> **Options**</span>
</span><span id="Client.create_reader-796"><a href="#Client.create_reader-796"><span class="linenos">796</span></a>
</span><span id="Client.create_reader-797"><a href="#Client.create_reader-797"><span class="linenos">797</span></a><span class="sd"> * `schema`:</span>
</span><span id="Client.create_reader-798"><a href="#Client.create_reader-798"><span class="linenos">798</span></a><span class="sd"> Define the schema of the data that will be received by this reader.</span>
</span><span id="Client.create_reader-799"><a href="#Client.create_reader-799"><span class="linenos">799</span></a><span class="sd"> * `reader_listener`:</span>
</span><span id="Client.create_reader-800"><a href="#Client.create_reader-800"><span class="linenos">800</span></a><span class="sd"> Sets a message listener for the reader. When the listener is set,</span>
</span><span id="Client.create_reader-801"><a href="#Client.create_reader-801"><span class="linenos">801</span></a><span class="sd"> the application will receive messages through it. Calls to</span>
</span><span id="Client.create_reader-802"><a href="#Client.create_reader-802"><span class="linenos">802</span></a><span class="sd"> `reader.read_next()` will not be allowed. The listener function needs</span>
</span><span id="Client.create_reader-803"><a href="#Client.create_reader-803"><span class="linenos">803</span></a><span class="sd"> to accept (reader, message), for example:</span>
</span><span id="Client.create_reader-804"><a href="#Client.create_reader-804"><span class="linenos">804</span></a>
</span><span id="Client.create_reader-805"><a href="#Client.create_reader-805"><span class="linenos">805</span></a><span class="sd"> def my_listener(reader, message):</span>
</span><span id="Client.create_reader-806"><a href="#Client.create_reader-806"><span class="linenos">806</span></a><span class="sd"> # process message</span>
</span><span id="Client.create_reader-807"><a href="#Client.create_reader-807"><span class="linenos">807</span></a><span class="sd"> pass</span>
</span><span id="Client.create_reader-808"><a href="#Client.create_reader-808"><span class="linenos">808</span></a>
</span><span id="Client.create_reader-809"><a href="#Client.create_reader-809"><span class="linenos">809</span></a><span class="sd"> * `receiver_queue_size`:</span>
</span><span id="Client.create_reader-810"><a href="#Client.create_reader-810"><span class="linenos">810</span></a><span class="sd"> Sets the size of the reader receive queue. The reader receive</span>
</span><span id="Client.create_reader-811"><a href="#Client.create_reader-811"><span class="linenos">811</span></a><span class="sd"> queue controls how many messages can be accumulated by the reader</span>
</span><span id="Client.create_reader-812"><a href="#Client.create_reader-812"><span class="linenos">812</span></a><span class="sd"> before the application calls `read_next()`. Using a higher value could</span>
</span><span id="Client.create_reader-813"><a href="#Client.create_reader-813"><span class="linenos">813</span></a><span class="sd"> potentially increase the reader throughput at the expense of higher</span>
</span><span id="Client.create_reader-814"><a href="#Client.create_reader-814"><span class="linenos">814</span></a><span class="sd"> memory utilization.</span>
</span><span id="Client.create_reader-815"><a href="#Client.create_reader-815"><span class="linenos">815</span></a><span class="sd"> * `reader_name`:</span>
</span><span id="Client.create_reader-816"><a href="#Client.create_reader-816"><span class="linenos">816</span></a><span class="sd"> Sets the reader name.</span>
</span><span id="Client.create_reader-817"><a href="#Client.create_reader-817"><span class="linenos">817</span></a><span class="sd"> * `subscription_role_prefix`:</span>
</span><span id="Client.create_reader-818"><a href="#Client.create_reader-818"><span class="linenos">818</span></a><span class="sd"> Sets the subscription role prefix.</span>
</span><span id="Client.create_reader-819"><a href="#Client.create_reader-819"><span class="linenos">819</span></a><span class="sd"> * `is_read_compacted`:</span>
</span><span id="Client.create_reader-820"><a href="#Client.create_reader-820"><span class="linenos">820</span></a><span class="sd"> Selects whether to read the compacted version of the topic</span>
</span><span id="Client.create_reader-821"><a href="#Client.create_reader-821"><span class="linenos">821</span></a><span class="sd"> * crypto_key_reader:</span>
</span><span id="Client.create_reader-822"><a href="#Client.create_reader-822"><span class="linenos">822</span></a><span class="sd"> Symmetric encryption class implementation, configuring public key encryption messages for the producer</span>
</span><span id="Client.create_reader-823"><a href="#Client.create_reader-823"><span class="linenos">823</span></a><span class="sd"> and private key decryption messages for the consumer</span>
</span><span id="Client.create_reader-824"><a href="#Client.create_reader-824"><span class="linenos">824</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="Client.create_reader-825"><a href="#Client.create_reader-825"><span class="linenos">825</span></a> <span class="n">_check_type</span><span class="p">(</span><span class="nb">str</span><span class="p">,</span> <span class="n">topic</span><span class="p">,</span> <span class="s1">&#39;topic&#39;</span><span class="p">)</span>
</span><span id="Client.create_reader-826"><a href="#Client.create_reader-826"><span class="linenos">826</span></a> <span class="n">_check_type</span><span class="p">(</span><span class="n">_pulsar</span><span class="o">.</span><span class="n">MessageId</span><span class="p">,</span> <span class="n">start_message_id</span><span class="p">,</span> <span class="s1">&#39;start_message_id&#39;</span><span class="p">)</span>
</span><span id="Client.create_reader-827"><a href="#Client.create_reader-827"><span class="linenos">827</span></a> <span class="n">_check_type</span><span class="p">(</span><span class="n">_schema</span><span class="o">.</span><span class="n">Schema</span><span class="p">,</span> <span class="n">schema</span><span class="p">,</span> <span class="s1">&#39;schema&#39;</span><span class="p">)</span>
</span><span id="Client.create_reader-828"><a href="#Client.create_reader-828"><span class="linenos">828</span></a> <span class="n">_check_type</span><span class="p">(</span><span class="nb">int</span><span class="p">,</span> <span class="n">receiver_queue_size</span><span class="p">,</span> <span class="s1">&#39;receiver_queue_size&#39;</span><span class="p">)</span>
</span><span id="Client.create_reader-829"><a href="#Client.create_reader-829"><span class="linenos">829</span></a> <span class="n">_check_type_or_none</span><span class="p">(</span><span class="nb">str</span><span class="p">,</span> <span class="n">reader_name</span><span class="p">,</span> <span class="s1">&#39;reader_name&#39;</span><span class="p">)</span>
</span><span id="Client.create_reader-830"><a href="#Client.create_reader-830"><span class="linenos">830</span></a> <span class="n">_check_type_or_none</span><span class="p">(</span><span class="nb">str</span><span class="p">,</span> <span class="n">subscription_role_prefix</span><span class="p">,</span> <span class="s1">&#39;subscription_role_prefix&#39;</span><span class="p">)</span>
</span><span id="Client.create_reader-831"><a href="#Client.create_reader-831"><span class="linenos">831</span></a> <span class="n">_check_type</span><span class="p">(</span><span class="nb">bool</span><span class="p">,</span> <span class="n">is_read_compacted</span><span class="p">,</span> <span class="s1">&#39;is_read_compacted&#39;</span><span class="p">)</span>
</span><span id="Client.create_reader-832"><a href="#Client.create_reader-832"><span class="linenos">832</span></a> <span class="n">_check_type_or_none</span><span class="p">(</span><span class="n">CryptoKeyReader</span><span class="p">,</span> <span class="n">crypto_key_reader</span><span class="p">,</span> <span class="s1">&#39;crypto_key_reader&#39;</span><span class="p">)</span>
</span><span id="Client.create_reader-833"><a href="#Client.create_reader-833"><span class="linenos">833</span></a>
</span><span id="Client.create_reader-834"><a href="#Client.create_reader-834"><span class="linenos">834</span></a> <span class="n">conf</span> <span class="o">=</span> <span class="n">_pulsar</span><span class="o">.</span><span class="n">ReaderConfiguration</span><span class="p">()</span>
</span><span id="Client.create_reader-835"><a href="#Client.create_reader-835"><span class="linenos">835</span></a> <span class="k">if</span> <span class="n">reader_listener</span><span class="p">:</span>
</span><span id="Client.create_reader-836"><a href="#Client.create_reader-836"><span class="linenos">836</span></a> <span class="n">conf</span><span class="o">.</span><span class="n">reader_listener</span><span class="p">(</span><span class="n">_listener_wrapper</span><span class="p">(</span><span class="n">reader_listener</span><span class="p">,</span> <span class="n">schema</span><span class="p">))</span>
</span><span id="Client.create_reader-837"><a href="#Client.create_reader-837"><span class="linenos">837</span></a> <span class="n">conf</span><span class="o">.</span><span class="n">receiver_queue_size</span><span class="p">(</span><span class="n">receiver_queue_size</span><span class="p">)</span>
</span><span id="Client.create_reader-838"><a href="#Client.create_reader-838"><span class="linenos">838</span></a> <span class="k">if</span> <span class="n">reader_name</span><span class="p">:</span>
</span><span id="Client.create_reader-839"><a href="#Client.create_reader-839"><span class="linenos">839</span></a> <span class="n">conf</span><span class="o">.</span><span class="n">reader_name</span><span class="p">(</span><span class="n">reader_name</span><span class="p">)</span>
</span><span id="Client.create_reader-840"><a href="#Client.create_reader-840"><span class="linenos">840</span></a> <span class="k">if</span> <span class="n">subscription_role_prefix</span><span class="p">:</span>
</span><span id="Client.create_reader-841"><a href="#Client.create_reader-841"><span class="linenos">841</span></a> <span class="n">conf</span><span class="o">.</span><span class="n">subscription_role_prefix</span><span class="p">(</span><span class="n">subscription_role_prefix</span><span class="p">)</span>
</span><span id="Client.create_reader-842"><a href="#Client.create_reader-842"><span class="linenos">842</span></a> <span class="n">conf</span><span class="o">.</span><span class="n">schema</span><span class="p">(</span><span class="n">schema</span><span class="o">.</span><span class="n">schema_info</span><span class="p">())</span>
</span><span id="Client.create_reader-843"><a href="#Client.create_reader-843"><span class="linenos">843</span></a> <span class="n">conf</span><span class="o">.</span><span class="n">read_compacted</span><span class="p">(</span><span class="n">is_read_compacted</span><span class="p">)</span>
</span><span id="Client.create_reader-844"><a href="#Client.create_reader-844"><span class="linenos">844</span></a> <span class="k">if</span> <span class="n">crypto_key_reader</span><span class="p">:</span>
</span><span id="Client.create_reader-845"><a href="#Client.create_reader-845"><span class="linenos">845</span></a> <span class="n">conf</span><span class="o">.</span><span class="n">crypto_key_reader</span><span class="p">(</span><span class="n">crypto_key_reader</span><span class="o">.</span><span class="n">cryptoKeyReader</span><span class="p">)</span>
</span><span id="Client.create_reader-846"><a href="#Client.create_reader-846"><span class="linenos">846</span></a>
</span><span id="Client.create_reader-847"><a href="#Client.create_reader-847"><span class="linenos">847</span></a> <span class="n">c</span> <span class="o">=</span> <span class="n">Reader</span><span class="p">()</span>
</span><span id="Client.create_reader-848"><a href="#Client.create_reader-848"><span class="linenos">848</span></a> <span class="n">c</span><span class="o">.</span><span class="n">_reader</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_client</span><span class="o">.</span><span class="n">create_reader</span><span class="p">(</span><span class="n">topic</span><span class="p">,</span> <span class="n">start_message_id</span><span class="p">,</span> <span class="n">conf</span><span class="p">)</span>
</span><span id="Client.create_reader-849"><a href="#Client.create_reader-849"><span class="linenos">849</span></a> <span class="n">c</span><span class="o">.</span><span class="n">_client</span> <span class="o">=</span> <span class="bp">self</span>
</span><span id="Client.create_reader-850"><a href="#Client.create_reader-850"><span class="linenos">850</span></a> <span class="n">c</span><span class="o">.</span><span class="n">_schema</span> <span class="o">=</span> <span class="n">schema</span>
</span><span id="Client.create_reader-851"><a href="#Client.create_reader-851"><span class="linenos">851</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_consumers</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">c</span><span class="p">)</span>
</span><span id="Client.create_reader-852"><a href="#Client.create_reader-852"><span class="linenos">852</span></a> <span class="k">return</span> <span class="n">c</span>
</span></pre></div>
<div class="docstring"><p>Create a reader on a particular topic</p>
<p><strong>Args</strong></p>
<ul>
<li><code>topic</code>: The name of the topic.</li>
<li><p><code>start_message_id</code>: The initial reader positioning is done by specifying a message id.
The options are:</p>
<ul>
<li><code><a href="#MessageId.earliest">MessageId.earliest</a></code>: Start reading from the earliest message available in the topic</li>
<li><code>MessageId.latest</code>: Start reading from the end topic, only getting messages published
after the reader was created</li>
<li><p><code><a href="#MessageId">MessageId</a></code>: When passing a particular message id, the reader will position itself on
that specific position. The first message to be read will be the message next to the
specified messageId. Message id can be serialized into a string and deserialized
back into a <code><a href="#MessageId">MessageId</a></code> object:</p>
<p># Serialize to string
s = msg.message_id().serialize()</p>
<p># Deserialize from string
msg_id = <a href="#MessageId.deserialize">MessageId.deserialize</a>(s)</p></li>
</ul></li>
</ul>
<p><strong>Options</strong></p>
<ul>
<li><code>schema</code>:
Define the schema of the data that will be received by this reader.</li>
<li><p><code>reader_listener</code>:
Sets a message listener for the reader. When the listener is set,
the application will receive messages through it. Calls to
<code>reader.read_next()</code> will not be allowed. The listener function needs
to accept (reader, message), for example:</p>
<pre><code>def my_listener(reader, message):
# process message
pass
</code></pre></li>
<li><p><code>receiver_queue_size</code>:
Sets the size of the reader receive queue. The reader receive
queue controls how many messages can be accumulated by the reader
before the application calls <code>read_next()</code>. Using a higher value could
potentially increase the reader throughput at the expense of higher
memory utilization.</p></li>
<li><code>reader_name</code>:
Sets the reader name.</li>
<li><code>subscription_role_prefix</code>:
Sets the subscription role prefix.</li>
<li><code>is_read_compacted</code>:
Selects whether to read the compacted version of the topic</li>
<li>crypto_key_reader:
Symmetric encryption class implementation, configuring public key encryption messages for the producer
and private key decryption messages for the consumer</li>
</ul>
</div>
</div>
<div id="Client.get_topic_partitions" class="classattr">
<input id="Client.get_topic_partitions-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<div class="attr function">
<span class="def">def</span>
<span class="name">get_topic_partitions</span><span class="signature pdoc-code condensed">(<span class="param"><span class="bp">self</span>, </span><span class="param"><span class="n">topic</span></span><span class="return-annotation">):</span></span>
<label class="view-source-button" for="Client.get_topic_partitions-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#Client.get_topic_partitions"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="Client.get_topic_partitions-854"><a href="#Client.get_topic_partitions-854"><span class="linenos">854</span></a> <span class="k">def</span> <span class="nf">get_topic_partitions</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">topic</span><span class="p">):</span>
</span><span id="Client.get_topic_partitions-855"><a href="#Client.get_topic_partitions-855"><span class="linenos">855</span></a> <span class="sd">&quot;&quot;&quot;</span>
</span><span id="Client.get_topic_partitions-856"><a href="#Client.get_topic_partitions-856"><span class="linenos">856</span></a><span class="sd"> Get the list of partitions for a given topic.</span>
</span><span id="Client.get_topic_partitions-857"><a href="#Client.get_topic_partitions-857"><span class="linenos">857</span></a>
</span><span id="Client.get_topic_partitions-858"><a href="#Client.get_topic_partitions-858"><span class="linenos">858</span></a><span class="sd"> If the topic is partitioned, this will return a list of partition names. If the topic is not</span>
</span><span id="Client.get_topic_partitions-859"><a href="#Client.get_topic_partitions-859"><span class="linenos">859</span></a><span class="sd"> partitioned, the returned list will contain the topic name itself.</span>
</span><span id="Client.get_topic_partitions-860"><a href="#Client.get_topic_partitions-860"><span class="linenos">860</span></a>
</span><span id="Client.get_topic_partitions-861"><a href="#Client.get_topic_partitions-861"><span class="linenos">861</span></a><span class="sd"> This can be used to discover the partitions and create Reader, Consumer or Producer</span>
</span><span id="Client.get_topic_partitions-862"><a href="#Client.get_topic_partitions-862"><span class="linenos">862</span></a><span class="sd"> instances directly on a particular partition.</span>
</span><span id="Client.get_topic_partitions-863"><a href="#Client.get_topic_partitions-863"><span class="linenos">863</span></a><span class="sd"> :param topic: the topic name to lookup</span>
</span><span id="Client.get_topic_partitions-864"><a href="#Client.get_topic_partitions-864"><span class="linenos">864</span></a><span class="sd"> :return: a list of partition name</span>
</span><span id="Client.get_topic_partitions-865"><a href="#Client.get_topic_partitions-865"><span class="linenos">865</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="Client.get_topic_partitions-866"><a href="#Client.get_topic_partitions-866"><span class="linenos">866</span></a> <span class="n">_check_type</span><span class="p">(</span><span class="nb">str</span><span class="p">,</span> <span class="n">topic</span><span class="p">,</span> <span class="s1">&#39;topic&#39;</span><span class="p">)</span>
</span><span id="Client.get_topic_partitions-867"><a href="#Client.get_topic_partitions-867"><span class="linenos">867</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_client</span><span class="o">.</span><span class="n">get_topic_partitions</span><span class="p">(</span><span class="n">topic</span><span class="p">)</span>
</span></pre></div>
<div class="docstring"><p>Get the list of partitions for a given topic.</p>
<p>If the topic is partitioned, this will return a list of partition names. If the topic is not
partitioned, the returned list will contain the topic name itself.</p>
<p>This can be used to discover the partitions and create Reader, Consumer or Producer
instances directly on a particular partition.</p>
<h6 id="parameters">Parameters</h6>
<ul>
<li><strong>topic</strong>: the topic name to lookup</li>
</ul>
<h6 id="returns">Returns</h6>
<blockquote>
<p>a list of partition name</p>
</blockquote>
</div>
</div>
<div id="Client.shutdown" class="classattr">
<input id="Client.shutdown-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<div class="attr function">
<span class="def">def</span>
<span class="name">shutdown</span><span class="signature pdoc-code condensed">(<span class="param"><span class="bp">self</span></span><span class="return-annotation">):</span></span>
<label class="view-source-button" for="Client.shutdown-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#Client.shutdown"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="Client.shutdown-869"><a href="#Client.shutdown-869"><span class="linenos">869</span></a> <span class="k">def</span> <span class="nf">shutdown</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
</span><span id="Client.shutdown-870"><a href="#Client.shutdown-870"><span class="linenos">870</span></a> <span class="sd">&quot;&quot;&quot;</span>
</span><span id="Client.shutdown-871"><a href="#Client.shutdown-871"><span class="linenos">871</span></a><span class="sd"> Perform immediate shutdown of Pulsar client.</span>
</span><span id="Client.shutdown-872"><a href="#Client.shutdown-872"><span class="linenos">872</span></a>
</span><span id="Client.shutdown-873"><a href="#Client.shutdown-873"><span class="linenos">873</span></a><span class="sd"> Release all resources and close all producer, consumer, and readers without waiting</span>
</span><span id="Client.shutdown-874"><a href="#Client.shutdown-874"><span class="linenos">874</span></a><span class="sd"> for ongoing operations to complete.</span>
</span><span id="Client.shutdown-875"><a href="#Client.shutdown-875"><span class="linenos">875</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="Client.shutdown-876"><a href="#Client.shutdown-876"><span class="linenos">876</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_client</span><span class="o">.</span><span class="n">shutdown</span><span class="p">()</span>
</span></pre></div>
<div class="docstring"><p>Perform immediate shutdown of Pulsar client.</p>
<p>Release all resources and close all producer, consumer, and readers without waiting
for ongoing operations to complete.</p>
</div>
</div>
<div id="Client.close" class="classattr">
<input id="Client.close-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<div class="attr function">
<span class="def">def</span>
<span class="name">close</span><span class="signature pdoc-code condensed">(<span class="param"><span class="bp">self</span></span><span class="return-annotation">):</span></span>
<label class="view-source-button" for="Client.close-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#Client.close"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="Client.close-878"><a href="#Client.close-878"><span class="linenos">878</span></a> <span class="k">def</span> <span class="nf">close</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
</span><span id="Client.close-879"><a href="#Client.close-879"><span class="linenos">879</span></a> <span class="sd">&quot;&quot;&quot;</span>
</span><span id="Client.close-880"><a href="#Client.close-880"><span class="linenos">880</span></a><span class="sd"> Close the client and all the associated producers and consumers</span>
</span><span id="Client.close-881"><a href="#Client.close-881"><span class="linenos">881</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="Client.close-882"><a href="#Client.close-882"><span class="linenos">882</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_client</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
</span></pre></div>
<div class="docstring"><p>Close the client and all the associated producers and consumers</p>
</div>
</div>
</section>
<section id="Producer">
<input id="Producer-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<div class="attr class">
<span class="def">class</span>
<span class="name">Producer</span>:
<label class="view-source-button" for="Producer-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#Producer"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="Producer-885"><a href="#Producer-885"><span class="linenos"> 885</span></a><span class="k">class</span> <span class="nc">Producer</span><span class="p">:</span>
</span><span id="Producer-886"><a href="#Producer-886"><span class="linenos"> 886</span></a> <span class="sd">&quot;&quot;&quot;</span>
</span><span id="Producer-887"><a href="#Producer-887"><span class="linenos"> 887</span></a><span class="sd"> The Pulsar message producer, used to publish messages on a topic.</span>
</span><span id="Producer-888"><a href="#Producer-888"><span class="linenos"> 888</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="Producer-889"><a href="#Producer-889"><span class="linenos"> 889</span></a>
</span><span id="Producer-890"><a href="#Producer-890"><span class="linenos"> 890</span></a> <span class="k">def</span> <span class="nf">topic</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
</span><span id="Producer-891"><a href="#Producer-891"><span class="linenos"> 891</span></a> <span class="sd">&quot;&quot;&quot;</span>
</span><span id="Producer-892"><a href="#Producer-892"><span class="linenos"> 892</span></a><span class="sd"> Return the topic which producer is publishing to</span>
</span><span id="Producer-893"><a href="#Producer-893"><span class="linenos"> 893</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="Producer-894"><a href="#Producer-894"><span class="linenos"> 894</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_producer</span><span class="o">.</span><span class="n">topic</span><span class="p">()</span>
</span><span id="Producer-895"><a href="#Producer-895"><span class="linenos"> 895</span></a>
</span><span id="Producer-896"><a href="#Producer-896"><span class="linenos"> 896</span></a> <span class="k">def</span> <span class="nf">producer_name</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
</span><span id="Producer-897"><a href="#Producer-897"><span class="linenos"> 897</span></a> <span class="sd">&quot;&quot;&quot;</span>
</span><span id="Producer-898"><a href="#Producer-898"><span class="linenos"> 898</span></a><span class="sd"> Return the producer name which could have been assigned by the</span>
</span><span id="Producer-899"><a href="#Producer-899"><span class="linenos"> 899</span></a><span class="sd"> system or specified by the client</span>
</span><span id="Producer-900"><a href="#Producer-900"><span class="linenos"> 900</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="Producer-901"><a href="#Producer-901"><span class="linenos"> 901</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_producer</span><span class="o">.</span><span class="n">producer_name</span><span class="p">()</span>
</span><span id="Producer-902"><a href="#Producer-902"><span class="linenos"> 902</span></a>
</span><span id="Producer-903"><a href="#Producer-903"><span class="linenos"> 903</span></a> <span class="k">def</span> <span class="nf">last_sequence_id</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
</span><span id="Producer-904"><a href="#Producer-904"><span class="linenos"> 904</span></a> <span class="sd">&quot;&quot;&quot;</span>
</span><span id="Producer-905"><a href="#Producer-905"><span class="linenos"> 905</span></a><span class="sd"> Get the last sequence id that was published by this producer.</span>
</span><span id="Producer-906"><a href="#Producer-906"><span class="linenos"> 906</span></a>
</span><span id="Producer-907"><a href="#Producer-907"><span class="linenos"> 907</span></a><span class="sd"> This represent either the automatically assigned or custom sequence id</span>
</span><span id="Producer-908"><a href="#Producer-908"><span class="linenos"> 908</span></a><span class="sd"> (set on the `MessageBuilder`) that was published and acknowledged by the broker.</span>
</span><span id="Producer-909"><a href="#Producer-909"><span class="linenos"> 909</span></a>
</span><span id="Producer-910"><a href="#Producer-910"><span class="linenos"> 910</span></a><span class="sd"> After recreating a producer with the same producer name, this will return the</span>
</span><span id="Producer-911"><a href="#Producer-911"><span class="linenos"> 911</span></a><span class="sd"> last message that was published in the previous producer session, or -1 if</span>
</span><span id="Producer-912"><a href="#Producer-912"><span class="linenos"> 912</span></a><span class="sd"> there no message was ever published.</span>
</span><span id="Producer-913"><a href="#Producer-913"><span class="linenos"> 913</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="Producer-914"><a href="#Producer-914"><span class="linenos"> 914</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_producer</span><span class="o">.</span><span class="n">last_sequence_id</span><span class="p">()</span>
</span><span id="Producer-915"><a href="#Producer-915"><span class="linenos"> 915</span></a>
</span><span id="Producer-916"><a href="#Producer-916"><span class="linenos"> 916</span></a> <span class="k">def</span> <span class="nf">send</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">content</span><span class="p">,</span>
</span><span id="Producer-917"><a href="#Producer-917"><span class="linenos"> 917</span></a> <span class="n">properties</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
</span><span id="Producer-918"><a href="#Producer-918"><span class="linenos"> 918</span></a> <span class="n">partition_key</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
</span><span id="Producer-919"><a href="#Producer-919"><span class="linenos"> 919</span></a> <span class="n">sequence_id</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
</span><span id="Producer-920"><a href="#Producer-920"><span class="linenos"> 920</span></a> <span class="n">replication_clusters</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
</span><span id="Producer-921"><a href="#Producer-921"><span class="linenos"> 921</span></a> <span class="n">disable_replication</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
</span><span id="Producer-922"><a href="#Producer-922"><span class="linenos"> 922</span></a> <span class="n">event_timestamp</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
</span><span id="Producer-923"><a href="#Producer-923"><span class="linenos"> 923</span></a> <span class="n">deliver_at</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
</span><span id="Producer-924"><a href="#Producer-924"><span class="linenos"> 924</span></a> <span class="n">deliver_after</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
</span><span id="Producer-925"><a href="#Producer-925"><span class="linenos"> 925</span></a> <span class="p">):</span>
</span><span id="Producer-926"><a href="#Producer-926"><span class="linenos"> 926</span></a> <span class="sd">&quot;&quot;&quot;</span>
</span><span id="Producer-927"><a href="#Producer-927"><span class="linenos"> 927</span></a><span class="sd"> Publish a message on the topic. Blocks until the message is acknowledged</span>
</span><span id="Producer-928"><a href="#Producer-928"><span class="linenos"> 928</span></a>
</span><span id="Producer-929"><a href="#Producer-929"><span class="linenos"> 929</span></a><span class="sd"> Returns a `MessageId` object that represents where the message is persisted.</span>
</span><span id="Producer-930"><a href="#Producer-930"><span class="linenos"> 930</span></a>
</span><span id="Producer-931"><a href="#Producer-931"><span class="linenos"> 931</span></a><span class="sd"> **Args**</span>
</span><span id="Producer-932"><a href="#Producer-932"><span class="linenos"> 932</span></a>
</span><span id="Producer-933"><a href="#Producer-933"><span class="linenos"> 933</span></a><span class="sd"> * `content`:</span>
</span><span id="Producer-934"><a href="#Producer-934"><span class="linenos"> 934</span></a><span class="sd"> A `bytes` object with the message payload.</span>
</span><span id="Producer-935"><a href="#Producer-935"><span class="linenos"> 935</span></a>
</span><span id="Producer-936"><a href="#Producer-936"><span class="linenos"> 936</span></a><span class="sd"> **Options**</span>
</span><span id="Producer-937"><a href="#Producer-937"><span class="linenos"> 937</span></a>
</span><span id="Producer-938"><a href="#Producer-938"><span class="linenos"> 938</span></a><span class="sd"> * `properties`:</span>
</span><span id="Producer-939"><a href="#Producer-939"><span class="linenos"> 939</span></a><span class="sd"> A dict of application-defined string properties.</span>
</span><span id="Producer-940"><a href="#Producer-940"><span class="linenos"> 940</span></a><span class="sd"> * `partition_key`:</span>
</span><span id="Producer-941"><a href="#Producer-941"><span class="linenos"> 941</span></a><span class="sd"> Sets the partition key for message routing. A hash of this key is used</span>
</span><span id="Producer-942"><a href="#Producer-942"><span class="linenos"> 942</span></a><span class="sd"> to determine the message&#39;s topic partition.</span>
</span><span id="Producer-943"><a href="#Producer-943"><span class="linenos"> 943</span></a><span class="sd"> * `sequence_id`:</span>
</span><span id="Producer-944"><a href="#Producer-944"><span class="linenos"> 944</span></a><span class="sd"> Specify a custom sequence id for the message being published.</span>
</span><span id="Producer-945"><a href="#Producer-945"><span class="linenos"> 945</span></a><span class="sd"> * `replication_clusters`:</span>
</span><span id="Producer-946"><a href="#Producer-946"><span class="linenos"> 946</span></a><span class="sd"> Override namespace replication clusters. Note that it is the caller&#39;s</span>
</span><span id="Producer-947"><a href="#Producer-947"><span class="linenos"> 947</span></a><span class="sd"> responsibility to provide valid cluster names and that all clusters</span>
</span><span id="Producer-948"><a href="#Producer-948"><span class="linenos"> 948</span></a><span class="sd"> have been previously configured as topics. Given an empty list,</span>
</span><span id="Producer-949"><a href="#Producer-949"><span class="linenos"> 949</span></a><span class="sd"> the message will replicate according to the namespace configuration.</span>
</span><span id="Producer-950"><a href="#Producer-950"><span class="linenos"> 950</span></a><span class="sd"> * `disable_replication`:</span>
</span><span id="Producer-951"><a href="#Producer-951"><span class="linenos"> 951</span></a><span class="sd"> Do not replicate this message.</span>
</span><span id="Producer-952"><a href="#Producer-952"><span class="linenos"> 952</span></a><span class="sd"> * `event_timestamp`:</span>
</span><span id="Producer-953"><a href="#Producer-953"><span class="linenos"> 953</span></a><span class="sd"> Timestamp in millis of the timestamp of event creation</span>
</span><span id="Producer-954"><a href="#Producer-954"><span class="linenos"> 954</span></a><span class="sd"> * `deliver_at`:</span>
</span><span id="Producer-955"><a href="#Producer-955"><span class="linenos"> 955</span></a><span class="sd"> Specify the this message should not be delivered earlier than the</span>
</span><span id="Producer-956"><a href="#Producer-956"><span class="linenos"> 956</span></a><span class="sd"> specified timestamp.</span>
</span><span id="Producer-957"><a href="#Producer-957"><span class="linenos"> 957</span></a><span class="sd"> The timestamp is milliseconds and based on UTC</span>
</span><span id="Producer-958"><a href="#Producer-958"><span class="linenos"> 958</span></a><span class="sd"> * `deliver_after`:</span>
</span><span id="Producer-959"><a href="#Producer-959"><span class="linenos"> 959</span></a><span class="sd"> Specify a delay in timedelta for the delivery of the messages.</span>
</span><span id="Producer-960"><a href="#Producer-960"><span class="linenos"> 960</span></a>
</span><span id="Producer-961"><a href="#Producer-961"><span class="linenos"> 961</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="Producer-962"><a href="#Producer-962"><span class="linenos"> 962</span></a> <span class="n">msg</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_build_msg</span><span class="p">(</span><span class="n">content</span><span class="p">,</span> <span class="n">properties</span><span class="p">,</span> <span class="n">partition_key</span><span class="p">,</span> <span class="n">sequence_id</span><span class="p">,</span>
</span><span id="Producer-963"><a href="#Producer-963"><span class="linenos"> 963</span></a> <span class="n">replication_clusters</span><span class="p">,</span> <span class="n">disable_replication</span><span class="p">,</span> <span class="n">event_timestamp</span><span class="p">,</span>
</span><span id="Producer-964"><a href="#Producer-964"><span class="linenos"> 964</span></a> <span class="n">deliver_at</span><span class="p">,</span> <span class="n">deliver_after</span><span class="p">)</span>
</span><span id="Producer-965"><a href="#Producer-965"><span class="linenos"> 965</span></a> <span class="k">return</span> <span class="n">MessageId</span><span class="o">.</span><span class="n">deserialize</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_producer</span><span class="o">.</span><span class="n">send</span><span class="p">(</span><span class="n">msg</span><span class="p">))</span>
</span><span id="Producer-966"><a href="#Producer-966"><span class="linenos"> 966</span></a>
</span><span id="Producer-967"><a href="#Producer-967"><span class="linenos"> 967</span></a> <span class="k">def</span> <span class="nf">send_async</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">content</span><span class="p">,</span> <span class="n">callback</span><span class="p">,</span>
</span><span id="Producer-968"><a href="#Producer-968"><span class="linenos"> 968</span></a> <span class="n">properties</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
</span><span id="Producer-969"><a href="#Producer-969"><span class="linenos"> 969</span></a> <span class="n">partition_key</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
</span><span id="Producer-970"><a href="#Producer-970"><span class="linenos"> 970</span></a> <span class="n">sequence_id</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
</span><span id="Producer-971"><a href="#Producer-971"><span class="linenos"> 971</span></a> <span class="n">replication_clusters</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
</span><span id="Producer-972"><a href="#Producer-972"><span class="linenos"> 972</span></a> <span class="n">disable_replication</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
</span><span id="Producer-973"><a href="#Producer-973"><span class="linenos"> 973</span></a> <span class="n">event_timestamp</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
</span><span id="Producer-974"><a href="#Producer-974"><span class="linenos"> 974</span></a> <span class="n">deliver_at</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
</span><span id="Producer-975"><a href="#Producer-975"><span class="linenos"> 975</span></a> <span class="n">deliver_after</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
</span><span id="Producer-976"><a href="#Producer-976"><span class="linenos"> 976</span></a> <span class="p">):</span>
</span><span id="Producer-977"><a href="#Producer-977"><span class="linenos"> 977</span></a> <span class="sd">&quot;&quot;&quot;</span>
</span><span id="Producer-978"><a href="#Producer-978"><span class="linenos"> 978</span></a><span class="sd"> Send a message asynchronously.</span>
</span><span id="Producer-979"><a href="#Producer-979"><span class="linenos"> 979</span></a>
</span><span id="Producer-980"><a href="#Producer-980"><span class="linenos"> 980</span></a><span class="sd"> The `callback` will be invoked once the message has been acknowledged</span>
</span><span id="Producer-981"><a href="#Producer-981"><span class="linenos"> 981</span></a><span class="sd"> by the broker.</span>
</span><span id="Producer-982"><a href="#Producer-982"><span class="linenos"> 982</span></a>
</span><span id="Producer-983"><a href="#Producer-983"><span class="linenos"> 983</span></a><span class="sd"> Example:</span>
</span><span id="Producer-984"><a href="#Producer-984"><span class="linenos"> 984</span></a>
</span><span id="Producer-985"><a href="#Producer-985"><span class="linenos"> 985</span></a><span class="sd"> #!python</span>
</span><span id="Producer-986"><a href="#Producer-986"><span class="linenos"> 986</span></a><span class="sd"> def callback(res, msg_id):</span>
</span><span id="Producer-987"><a href="#Producer-987"><span class="linenos"> 987</span></a><span class="sd"> print(&#39;Message published: %s&#39; % res)</span>
</span><span id="Producer-988"><a href="#Producer-988"><span class="linenos"> 988</span></a>
</span><span id="Producer-989"><a href="#Producer-989"><span class="linenos"> 989</span></a><span class="sd"> producer.send_async(msg, callback)</span>
</span><span id="Producer-990"><a href="#Producer-990"><span class="linenos"> 990</span></a>
</span><span id="Producer-991"><a href="#Producer-991"><span class="linenos"> 991</span></a><span class="sd"> When the producer queue is full, by default the message will be rejected</span>
</span><span id="Producer-992"><a href="#Producer-992"><span class="linenos"> 992</span></a><span class="sd"> and the callback invoked with an error code.</span>
</span><span id="Producer-993"><a href="#Producer-993"><span class="linenos"> 993</span></a>
</span><span id="Producer-994"><a href="#Producer-994"><span class="linenos"> 994</span></a><span class="sd"> **Args**</span>
</span><span id="Producer-995"><a href="#Producer-995"><span class="linenos"> 995</span></a>
</span><span id="Producer-996"><a href="#Producer-996"><span class="linenos"> 996</span></a><span class="sd"> * `content`:</span>
</span><span id="Producer-997"><a href="#Producer-997"><span class="linenos"> 997</span></a><span class="sd"> A `bytes` object with the message payload.</span>
</span><span id="Producer-998"><a href="#Producer-998"><span class="linenos"> 998</span></a>
</span><span id="Producer-999"><a href="#Producer-999"><span class="linenos"> 999</span></a><span class="sd"> **Options**</span>
</span><span id="Producer-1000"><a href="#Producer-1000"><span class="linenos">1000</span></a>
</span><span id="Producer-1001"><a href="#Producer-1001"><span class="linenos">1001</span></a><span class="sd"> * `properties`:</span>
</span><span id="Producer-1002"><a href="#Producer-1002"><span class="linenos">1002</span></a><span class="sd"> A dict of application0-defined string properties.</span>
</span><span id="Producer-1003"><a href="#Producer-1003"><span class="linenos">1003</span></a><span class="sd"> * `partition_key`:</span>
</span><span id="Producer-1004"><a href="#Producer-1004"><span class="linenos">1004</span></a><span class="sd"> Sets the partition key for the message routing. A hash of this key is</span>
</span><span id="Producer-1005"><a href="#Producer-1005"><span class="linenos">1005</span></a><span class="sd"> used to determine the message&#39;s topic partition.</span>
</span><span id="Producer-1006"><a href="#Producer-1006"><span class="linenos">1006</span></a><span class="sd"> * `sequence_id`:</span>
</span><span id="Producer-1007"><a href="#Producer-1007"><span class="linenos">1007</span></a><span class="sd"> Specify a custom sequence id for the message being published.</span>
</span><span id="Producer-1008"><a href="#Producer-1008"><span class="linenos">1008</span></a><span class="sd"> * `replication_clusters`: Override namespace replication clusters. Note</span>
</span><span id="Producer-1009"><a href="#Producer-1009"><span class="linenos">1009</span></a><span class="sd"> that it is the caller&#39;s responsibility to provide valid cluster names</span>
</span><span id="Producer-1010"><a href="#Producer-1010"><span class="linenos">1010</span></a><span class="sd"> and that all clusters have been previously configured as topics.</span>
</span><span id="Producer-1011"><a href="#Producer-1011"><span class="linenos">1011</span></a><span class="sd"> Given an empty list, the message will replicate per the namespace</span>
</span><span id="Producer-1012"><a href="#Producer-1012"><span class="linenos">1012</span></a><span class="sd"> configuration.</span>
</span><span id="Producer-1013"><a href="#Producer-1013"><span class="linenos">1013</span></a><span class="sd"> * `disable_replication`:</span>
</span><span id="Producer-1014"><a href="#Producer-1014"><span class="linenos">1014</span></a><span class="sd"> Do not replicate this message.</span>
</span><span id="Producer-1015"><a href="#Producer-1015"><span class="linenos">1015</span></a><span class="sd"> * `event_timestamp`:</span>
</span><span id="Producer-1016"><a href="#Producer-1016"><span class="linenos">1016</span></a><span class="sd"> Timestamp in millis of the timestamp of event creation</span>
</span><span id="Producer-1017"><a href="#Producer-1017"><span class="linenos">1017</span></a><span class="sd"> * `deliver_at`:</span>
</span><span id="Producer-1018"><a href="#Producer-1018"><span class="linenos">1018</span></a><span class="sd"> Specify the this message should not be delivered earlier than the</span>
</span><span id="Producer-1019"><a href="#Producer-1019"><span class="linenos">1019</span></a><span class="sd"> specified timestamp.</span>
</span><span id="Producer-1020"><a href="#Producer-1020"><span class="linenos">1020</span></a><span class="sd"> The timestamp is milliseconds and based on UTC</span>
</span><span id="Producer-1021"><a href="#Producer-1021"><span class="linenos">1021</span></a><span class="sd"> * `deliver_after`:</span>
</span><span id="Producer-1022"><a href="#Producer-1022"><span class="linenos">1022</span></a><span class="sd"> Specify a delay in timedelta for the delivery of the messages.</span>
</span><span id="Producer-1023"><a href="#Producer-1023"><span class="linenos">1023</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="Producer-1024"><a href="#Producer-1024"><span class="linenos">1024</span></a> <span class="n">msg</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_build_msg</span><span class="p">(</span><span class="n">content</span><span class="p">,</span> <span class="n">properties</span><span class="p">,</span> <span class="n">partition_key</span><span class="p">,</span> <span class="n">sequence_id</span><span class="p">,</span>
</span><span id="Producer-1025"><a href="#Producer-1025"><span class="linenos">1025</span></a> <span class="n">replication_clusters</span><span class="p">,</span> <span class="n">disable_replication</span><span class="p">,</span> <span class="n">event_timestamp</span><span class="p">,</span>
</span><span id="Producer-1026"><a href="#Producer-1026"><span class="linenos">1026</span></a> <span class="n">deliver_at</span><span class="p">,</span> <span class="n">deliver_after</span><span class="p">)</span>
</span><span id="Producer-1027"><a href="#Producer-1027"><span class="linenos">1027</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_producer</span><span class="o">.</span><span class="n">send_async</span><span class="p">(</span><span class="n">msg</span><span class="p">,</span> <span class="n">callback</span><span class="p">)</span>
</span><span id="Producer-1028"><a href="#Producer-1028"><span class="linenos">1028</span></a>
</span><span id="Producer-1029"><a href="#Producer-1029"><span class="linenos">1029</span></a>
</span><span id="Producer-1030"><a href="#Producer-1030"><span class="linenos">1030</span></a> <span class="k">def</span> <span class="nf">flush</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
</span><span id="Producer-1031"><a href="#Producer-1031"><span class="linenos">1031</span></a> <span class="sd">&quot;&quot;&quot;</span>
</span><span id="Producer-1032"><a href="#Producer-1032"><span class="linenos">1032</span></a><span class="sd"> Flush all the messages buffered in the client and wait until all messages have been</span>
</span><span id="Producer-1033"><a href="#Producer-1033"><span class="linenos">1033</span></a><span class="sd"> successfully persisted</span>
</span><span id="Producer-1034"><a href="#Producer-1034"><span class="linenos">1034</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="Producer-1035"><a href="#Producer-1035"><span class="linenos">1035</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_producer</span><span class="o">.</span><span class="n">flush</span><span class="p">()</span>
</span><span id="Producer-1036"><a href="#Producer-1036"><span class="linenos">1036</span></a>
</span><span id="Producer-1037"><a href="#Producer-1037"><span class="linenos">1037</span></a>
</span><span id="Producer-1038"><a href="#Producer-1038"><span class="linenos">1038</span></a> <span class="k">def</span> <span class="nf">close</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
</span><span id="Producer-1039"><a href="#Producer-1039"><span class="linenos">1039</span></a> <span class="sd">&quot;&quot;&quot;</span>
</span><span id="Producer-1040"><a href="#Producer-1040"><span class="linenos">1040</span></a><span class="sd"> Close the producer.</span>
</span><span id="Producer-1041"><a href="#Producer-1041"><span class="linenos">1041</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="Producer-1042"><a href="#Producer-1042"><span class="linenos">1042</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_producer</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
</span><span id="Producer-1043"><a href="#Producer-1043"><span class="linenos">1043</span></a>
</span><span id="Producer-1044"><a href="#Producer-1044"><span class="linenos">1044</span></a> <span class="k">def</span> <span class="nf">_build_msg</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">content</span><span class="p">,</span> <span class="n">properties</span><span class="p">,</span> <span class="n">partition_key</span><span class="p">,</span> <span class="n">sequence_id</span><span class="p">,</span>
</span><span id="Producer-1045"><a href="#Producer-1045"><span class="linenos">1045</span></a> <span class="n">replication_clusters</span><span class="p">,</span> <span class="n">disable_replication</span><span class="p">,</span> <span class="n">event_timestamp</span><span class="p">,</span>
</span><span id="Producer-1046"><a href="#Producer-1046"><span class="linenos">1046</span></a> <span class="n">deliver_at</span><span class="p">,</span> <span class="n">deliver_after</span><span class="p">):</span>
</span><span id="Producer-1047"><a href="#Producer-1047"><span class="linenos">1047</span></a> <span class="n">data</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_schema</span><span class="o">.</span><span class="n">encode</span><span class="p">(</span><span class="n">content</span><span class="p">)</span>
</span><span id="Producer-1048"><a href="#Producer-1048"><span class="linenos">1048</span></a>
</span><span id="Producer-1049"><a href="#Producer-1049"><span class="linenos">1049</span></a> <span class="n">_check_type</span><span class="p">(</span><span class="nb">bytes</span><span class="p">,</span> <span class="n">data</span><span class="p">,</span> <span class="s1">&#39;data&#39;</span><span class="p">)</span>
</span><span id="Producer-1050"><a href="#Producer-1050"><span class="linenos">1050</span></a> <span class="n">_check_type_or_none</span><span class="p">(</span><span class="nb">dict</span><span class="p">,</span> <span class="n">properties</span><span class="p">,</span> <span class="s1">&#39;properties&#39;</span><span class="p">)</span>
</span><span id="Producer-1051"><a href="#Producer-1051"><span class="linenos">1051</span></a> <span class="n">_check_type_or_none</span><span class="p">(</span><span class="nb">str</span><span class="p">,</span> <span class="n">partition_key</span><span class="p">,</span> <span class="s1">&#39;partition_key&#39;</span><span class="p">)</span>
</span><span id="Producer-1052"><a href="#Producer-1052"><span class="linenos">1052</span></a> <span class="n">_check_type_or_none</span><span class="p">(</span><span class="nb">int</span><span class="p">,</span> <span class="n">sequence_id</span><span class="p">,</span> <span class="s1">&#39;sequence_id&#39;</span><span class="p">)</span>
</span><span id="Producer-1053"><a href="#Producer-1053"><span class="linenos">1053</span></a> <span class="n">_check_type_or_none</span><span class="p">(</span><span class="nb">list</span><span class="p">,</span> <span class="n">replication_clusters</span><span class="p">,</span> <span class="s1">&#39;replication_clusters&#39;</span><span class="p">)</span>
</span><span id="Producer-1054"><a href="#Producer-1054"><span class="linenos">1054</span></a> <span class="n">_check_type</span><span class="p">(</span><span class="nb">bool</span><span class="p">,</span> <span class="n">disable_replication</span><span class="p">,</span> <span class="s1">&#39;disable_replication&#39;</span><span class="p">)</span>
</span><span id="Producer-1055"><a href="#Producer-1055"><span class="linenos">1055</span></a> <span class="n">_check_type_or_none</span><span class="p">(</span><span class="nb">int</span><span class="p">,</span> <span class="n">event_timestamp</span><span class="p">,</span> <span class="s1">&#39;event_timestamp&#39;</span><span class="p">)</span>
</span><span id="Producer-1056"><a href="#Producer-1056"><span class="linenos">1056</span></a> <span class="n">_check_type_or_none</span><span class="p">(</span><span class="nb">int</span><span class="p">,</span> <span class="n">deliver_at</span><span class="p">,</span> <span class="s1">&#39;deliver_at&#39;</span><span class="p">)</span>
</span><span id="Producer-1057"><a href="#Producer-1057"><span class="linenos">1057</span></a> <span class="n">_check_type_or_none</span><span class="p">(</span><span class="n">timedelta</span><span class="p">,</span> <span class="n">deliver_after</span><span class="p">,</span> <span class="s1">&#39;deliver_after&#39;</span><span class="p">)</span>
</span><span id="Producer-1058"><a href="#Producer-1058"><span class="linenos">1058</span></a>
</span><span id="Producer-1059"><a href="#Producer-1059"><span class="linenos">1059</span></a> <span class="n">mb</span> <span class="o">=</span> <span class="n">_pulsar</span><span class="o">.</span><span class="n">MessageBuilder</span><span class="p">()</span>
</span><span id="Producer-1060"><a href="#Producer-1060"><span class="linenos">1060</span></a> <span class="n">mb</span><span class="o">.</span><span class="n">content</span><span class="p">(</span><span class="n">data</span><span class="p">)</span>
</span><span id="Producer-1061"><a href="#Producer-1061"><span class="linenos">1061</span></a> <span class="k">if</span> <span class="n">properties</span><span class="p">:</span>
</span><span id="Producer-1062"><a href="#Producer-1062"><span class="linenos">1062</span></a> <span class="k">for</span> <span class="n">k</span><span class="p">,</span> <span class="n">v</span> <span class="ow">in</span> <span class="n">properties</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
</span><span id="Producer-1063"><a href="#Producer-1063"><span class="linenos">1063</span></a> <span class="n">mb</span><span class="o">.</span><span class="n">property</span><span class="p">(</span><span class="n">k</span><span class="p">,</span> <span class="n">v</span><span class="p">)</span>
</span><span id="Producer-1064"><a href="#Producer-1064"><span class="linenos">1064</span></a> <span class="k">if</span> <span class="n">partition_key</span><span class="p">:</span>
</span><span id="Producer-1065"><a href="#Producer-1065"><span class="linenos">1065</span></a> <span class="n">mb</span><span class="o">.</span><span class="n">partition_key</span><span class="p">(</span><span class="n">partition_key</span><span class="p">)</span>
</span><span id="Producer-1066"><a href="#Producer-1066"><span class="linenos">1066</span></a> <span class="k">if</span> <span class="n">sequence_id</span><span class="p">:</span>
</span><span id="Producer-1067"><a href="#Producer-1067"><span class="linenos">1067</span></a> <span class="n">mb</span><span class="o">.</span><span class="n">sequence_id</span><span class="p">(</span><span class="n">sequence_id</span><span class="p">)</span>
</span><span id="Producer-1068"><a href="#Producer-1068"><span class="linenos">1068</span></a> <span class="k">if</span> <span class="n">replication_clusters</span><span class="p">:</span>
</span><span id="Producer-1069"><a href="#Producer-1069"><span class="linenos">1069</span></a> <span class="n">mb</span><span class="o">.</span><span class="n">replication_clusters</span><span class="p">(</span><span class="n">replication_clusters</span><span class="p">)</span>
</span><span id="Producer-1070"><a href="#Producer-1070"><span class="linenos">1070</span></a> <span class="k">if</span> <span class="n">disable_replication</span><span class="p">:</span>
</span><span id="Producer-1071"><a href="#Producer-1071"><span class="linenos">1071</span></a> <span class="n">mb</span><span class="o">.</span><span class="n">disable_replication</span><span class="p">(</span><span class="n">disable_replication</span><span class="p">)</span>
</span><span id="Producer-1072"><a href="#Producer-1072"><span class="linenos">1072</span></a> <span class="k">if</span> <span class="n">event_timestamp</span><span class="p">:</span>
</span><span id="Producer-1073"><a href="#Producer-1073"><span class="linenos">1073</span></a> <span class="n">mb</span><span class="o">.</span><span class="n">event_timestamp</span><span class="p">(</span><span class="n">event_timestamp</span><span class="p">)</span>
</span><span id="Producer-1074"><a href="#Producer-1074"><span class="linenos">1074</span></a> <span class="k">if</span> <span class="n">deliver_at</span><span class="p">:</span>
</span><span id="Producer-1075"><a href="#Producer-1075"><span class="linenos">1075</span></a> <span class="n">mb</span><span class="o">.</span><span class="n">deliver_at</span><span class="p">(</span><span class="n">deliver_at</span><span class="p">)</span>
</span><span id="Producer-1076"><a href="#Producer-1076"><span class="linenos">1076</span></a> <span class="k">if</span> <span class="n">deliver_after</span><span class="p">:</span>
</span><span id="Producer-1077"><a href="#Producer-1077"><span class="linenos">1077</span></a> <span class="n">mb</span><span class="o">.</span><span class="n">deliver_after</span><span class="p">(</span><span class="n">deliver_after</span><span class="p">)</span>
</span><span id="Producer-1078"><a href="#Producer-1078"><span class="linenos">1078</span></a>
</span><span id="Producer-1079"><a href="#Producer-1079"><span class="linenos">1079</span></a> <span class="k">return</span> <span class="n">mb</span><span class="o">.</span><span class="n">build</span><span class="p">()</span>
</span></pre></div>
<div class="docstring"><p>The Pulsar message producer, used to publish messages on a topic.</p>
</div>
<div id="Producer.__init__" class="classattr">
<div class="attr function">
<span class="name">Producer</span><span class="signature pdoc-code condensed">()</span>
</div>
<a class="headerlink" href="#Producer.__init__"></a>
</div>
<div id="Producer.topic" class="classattr">
<input id="Producer.topic-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<div class="attr function">
<span class="def">def</span>
<span class="name">topic</span><span class="signature pdoc-code condensed">(<span class="param"><span class="bp">self</span></span><span class="return-annotation">):</span></span>
<label class="view-source-button" for="Producer.topic-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#Producer.topic"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="Producer.topic-890"><a href="#Producer.topic-890"><span class="linenos">890</span></a> <span class="k">def</span> <span class="nf">topic</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
</span><span id="Producer.topic-891"><a href="#Producer.topic-891"><span class="linenos">891</span></a> <span class="sd">&quot;&quot;&quot;</span>
</span><span id="Producer.topic-892"><a href="#Producer.topic-892"><span class="linenos">892</span></a><span class="sd"> Return the topic which producer is publishing to</span>
</span><span id="Producer.topic-893"><a href="#Producer.topic-893"><span class="linenos">893</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="Producer.topic-894"><a href="#Producer.topic-894"><span class="linenos">894</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_producer</span><span class="o">.</span><span class="n">topic</span><span class="p">()</span>
</span></pre></div>
<div class="docstring"><p>Return the topic which producer is publishing to</p>
</div>
</div>
<div id="Producer.producer_name" class="classattr">
<input id="Producer.producer_name-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<div class="attr function">
<span class="def">def</span>
<span class="name">producer_name</span><span class="signature pdoc-code condensed">(<span class="param"><span class="bp">self</span></span><span class="return-annotation">):</span></span>
<label class="view-source-button" for="Producer.producer_name-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#Producer.producer_name"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="Producer.producer_name-896"><a href="#Producer.producer_name-896"><span class="linenos">896</span></a> <span class="k">def</span> <span class="nf">producer_name</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
</span><span id="Producer.producer_name-897"><a href="#Producer.producer_name-897"><span class="linenos">897</span></a> <span class="sd">&quot;&quot;&quot;</span>
</span><span id="Producer.producer_name-898"><a href="#Producer.producer_name-898"><span class="linenos">898</span></a><span class="sd"> Return the producer name which could have been assigned by the</span>
</span><span id="Producer.producer_name-899"><a href="#Producer.producer_name-899"><span class="linenos">899</span></a><span class="sd"> system or specified by the client</span>
</span><span id="Producer.producer_name-900"><a href="#Producer.producer_name-900"><span class="linenos">900</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="Producer.producer_name-901"><a href="#Producer.producer_name-901"><span class="linenos">901</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_producer</span><span class="o">.</span><span class="n">producer_name</span><span class="p">()</span>
</span></pre></div>
<div class="docstring"><p>Return the producer name which could have been assigned by the
system or specified by the client</p>
</div>
</div>
<div id="Producer.last_sequence_id" class="classattr">
<input id="Producer.last_sequence_id-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<div class="attr function">
<span class="def">def</span>
<span class="name">last_sequence_id</span><span class="signature pdoc-code condensed">(<span class="param"><span class="bp">self</span></span><span class="return-annotation">):</span></span>
<label class="view-source-button" for="Producer.last_sequence_id-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#Producer.last_sequence_id"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="Producer.last_sequence_id-903"><a href="#Producer.last_sequence_id-903"><span class="linenos">903</span></a> <span class="k">def</span> <span class="nf">last_sequence_id</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
</span><span id="Producer.last_sequence_id-904"><a href="#Producer.last_sequence_id-904"><span class="linenos">904</span></a> <span class="sd">&quot;&quot;&quot;</span>
</span><span id="Producer.last_sequence_id-905"><a href="#Producer.last_sequence_id-905"><span class="linenos">905</span></a><span class="sd"> Get the last sequence id that was published by this producer.</span>
</span><span id="Producer.last_sequence_id-906"><a href="#Producer.last_sequence_id-906"><span class="linenos">906</span></a>
</span><span id="Producer.last_sequence_id-907"><a href="#Producer.last_sequence_id-907"><span class="linenos">907</span></a><span class="sd"> This represent either the automatically assigned or custom sequence id</span>
</span><span id="Producer.last_sequence_id-908"><a href="#Producer.last_sequence_id-908"><span class="linenos">908</span></a><span class="sd"> (set on the `MessageBuilder`) that was published and acknowledged by the broker.</span>
</span><span id="Producer.last_sequence_id-909"><a href="#Producer.last_sequence_id-909"><span class="linenos">909</span></a>
</span><span id="Producer.last_sequence_id-910"><a href="#Producer.last_sequence_id-910"><span class="linenos">910</span></a><span class="sd"> After recreating a producer with the same producer name, this will return the</span>
</span><span id="Producer.last_sequence_id-911"><a href="#Producer.last_sequence_id-911"><span class="linenos">911</span></a><span class="sd"> last message that was published in the previous producer session, or -1 if</span>
</span><span id="Producer.last_sequence_id-912"><a href="#Producer.last_sequence_id-912"><span class="linenos">912</span></a><span class="sd"> there no message was ever published.</span>
</span><span id="Producer.last_sequence_id-913"><a href="#Producer.last_sequence_id-913"><span class="linenos">913</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="Producer.last_sequence_id-914"><a href="#Producer.last_sequence_id-914"><span class="linenos">914</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_producer</span><span class="o">.</span><span class="n">last_sequence_id</span><span class="p">()</span>
</span></pre></div>
<div class="docstring"><p>Get the last sequence id that was published by this producer.</p>
<p>This represent either the automatically assigned or custom sequence id
(set on the <code>MessageBuilder</code>) that was published and acknowledged by the broker.</p>
<p>After recreating a producer with the same producer name, this will return the
last message that was published in the previous producer session, or -1 if
there no message was ever published.</p>
</div>
</div>
<div id="Producer.send" class="classattr">
<input id="Producer.send-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<div class="attr function">
<span class="def">def</span>
<span class="name">send</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="bp">self</span>,</span><span class="param"> <span class="n">content</span>,</span><span class="param"> <span class="n">properties</span><span class="o">=</span><span class="kc">None</span>,</span><span class="param"> <span class="n">partition_key</span><span class="o">=</span><span class="kc">None</span>,</span><span class="param"> <span class="n">sequence_id</span><span class="o">=</span><span class="kc">None</span>,</span><span class="param"> <span class="n">replication_clusters</span><span class="o">=</span><span class="kc">None</span>,</span><span class="param"> <span class="n">disable_replication</span><span class="o">=</span><span class="kc">False</span>,</span><span class="param"> <span class="n">event_timestamp</span><span class="o">=</span><span class="kc">None</span>,</span><span class="param"> <span class="n">deliver_at</span><span class="o">=</span><span class="kc">None</span>,</span><span class="param"> <span class="n">deliver_after</span><span class="o">=</span><span class="kc">None</span></span><span class="return-annotation">):</span></span>
<label class="view-source-button" for="Producer.send-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#Producer.send"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="Producer.send-916"><a href="#Producer.send-916"><span class="linenos">916</span></a> <span class="k">def</span> <span class="nf">send</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">content</span><span class="p">,</span>
</span><span id="Producer.send-917"><a href="#Producer.send-917"><span class="linenos">917</span></a> <span class="n">properties</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
</span><span id="Producer.send-918"><a href="#Producer.send-918"><span class="linenos">918</span></a> <span class="n">partition_key</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
</span><span id="Producer.send-919"><a href="#Producer.send-919"><span class="linenos">919</span></a> <span class="n">sequence_id</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
</span><span id="Producer.send-920"><a href="#Producer.send-920"><span class="linenos">920</span></a> <span class="n">replication_clusters</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
</span><span id="Producer.send-921"><a href="#Producer.send-921"><span class="linenos">921</span></a> <span class="n">disable_replication</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
</span><span id="Producer.send-922"><a href="#Producer.send-922"><span class="linenos">922</span></a> <span class="n">event_timestamp</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
</span><span id="Producer.send-923"><a href="#Producer.send-923"><span class="linenos">923</span></a> <span class="n">deliver_at</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
</span><span id="Producer.send-924"><a href="#Producer.send-924"><span class="linenos">924</span></a> <span class="n">deliver_after</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
</span><span id="Producer.send-925"><a href="#Producer.send-925"><span class="linenos">925</span></a> <span class="p">):</span>
</span><span id="Producer.send-926"><a href="#Producer.send-926"><span class="linenos">926</span></a> <span class="sd">&quot;&quot;&quot;</span>
</span><span id="Producer.send-927"><a href="#Producer.send-927"><span class="linenos">927</span></a><span class="sd"> Publish a message on the topic. Blocks until the message is acknowledged</span>
</span><span id="Producer.send-928"><a href="#Producer.send-928"><span class="linenos">928</span></a>
</span><span id="Producer.send-929"><a href="#Producer.send-929"><span class="linenos">929</span></a><span class="sd"> Returns a `MessageId` object that represents where the message is persisted.</span>
</span><span id="Producer.send-930"><a href="#Producer.send-930"><span class="linenos">930</span></a>
</span><span id="Producer.send-931"><a href="#Producer.send-931"><span class="linenos">931</span></a><span class="sd"> **Args**</span>
</span><span id="Producer.send-932"><a href="#Producer.send-932"><span class="linenos">932</span></a>
</span><span id="Producer.send-933"><a href="#Producer.send-933"><span class="linenos">933</span></a><span class="sd"> * `content`:</span>
</span><span id="Producer.send-934"><a href="#Producer.send-934"><span class="linenos">934</span></a><span class="sd"> A `bytes` object with the message payload.</span>
</span><span id="Producer.send-935"><a href="#Producer.send-935"><span class="linenos">935</span></a>
</span><span id="Producer.send-936"><a href="#Producer.send-936"><span class="linenos">936</span></a><span class="sd"> **Options**</span>
</span><span id="Producer.send-937"><a href="#Producer.send-937"><span class="linenos">937</span></a>
</span><span id="Producer.send-938"><a href="#Producer.send-938"><span class="linenos">938</span></a><span class="sd"> * `properties`:</span>
</span><span id="Producer.send-939"><a href="#Producer.send-939"><span class="linenos">939</span></a><span class="sd"> A dict of application-defined string properties.</span>
</span><span id="Producer.send-940"><a href="#Producer.send-940"><span class="linenos">940</span></a><span class="sd"> * `partition_key`:</span>
</span><span id="Producer.send-941"><a href="#Producer.send-941"><span class="linenos">941</span></a><span class="sd"> Sets the partition key for message routing. A hash of this key is used</span>
</span><span id="Producer.send-942"><a href="#Producer.send-942"><span class="linenos">942</span></a><span class="sd"> to determine the message&#39;s topic partition.</span>
</span><span id="Producer.send-943"><a href="#Producer.send-943"><span class="linenos">943</span></a><span class="sd"> * `sequence_id`:</span>
</span><span id="Producer.send-944"><a href="#Producer.send-944"><span class="linenos">944</span></a><span class="sd"> Specify a custom sequence id for the message being published.</span>
</span><span id="Producer.send-945"><a href="#Producer.send-945"><span class="linenos">945</span></a><span class="sd"> * `replication_clusters`:</span>
</span><span id="Producer.send-946"><a href="#Producer.send-946"><span class="linenos">946</span></a><span class="sd"> Override namespace replication clusters. Note that it is the caller&#39;s</span>
</span><span id="Producer.send-947"><a href="#Producer.send-947"><span class="linenos">947</span></a><span class="sd"> responsibility to provide valid cluster names and that all clusters</span>
</span><span id="Producer.send-948"><a href="#Producer.send-948"><span class="linenos">948</span></a><span class="sd"> have been previously configured as topics. Given an empty list,</span>
</span><span id="Producer.send-949"><a href="#Producer.send-949"><span class="linenos">949</span></a><span class="sd"> the message will replicate according to the namespace configuration.</span>
</span><span id="Producer.send-950"><a href="#Producer.send-950"><span class="linenos">950</span></a><span class="sd"> * `disable_replication`:</span>
</span><span id="Producer.send-951"><a href="#Producer.send-951"><span class="linenos">951</span></a><span class="sd"> Do not replicate this message.</span>
</span><span id="Producer.send-952"><a href="#Producer.send-952"><span class="linenos">952</span></a><span class="sd"> * `event_timestamp`:</span>
</span><span id="Producer.send-953"><a href="#Producer.send-953"><span class="linenos">953</span></a><span class="sd"> Timestamp in millis of the timestamp of event creation</span>
</span><span id="Producer.send-954"><a href="#Producer.send-954"><span class="linenos">954</span></a><span class="sd"> * `deliver_at`:</span>
</span><span id="Producer.send-955"><a href="#Producer.send-955"><span class="linenos">955</span></a><span class="sd"> Specify the this message should not be delivered earlier than the</span>
</span><span id="Producer.send-956"><a href="#Producer.send-956"><span class="linenos">956</span></a><span class="sd"> specified timestamp.</span>
</span><span id="Producer.send-957"><a href="#Producer.send-957"><span class="linenos">957</span></a><span class="sd"> The timestamp is milliseconds and based on UTC</span>
</span><span id="Producer.send-958"><a href="#Producer.send-958"><span class="linenos">958</span></a><span class="sd"> * `deliver_after`:</span>
</span><span id="Producer.send-959"><a href="#Producer.send-959"><span class="linenos">959</span></a><span class="sd"> Specify a delay in timedelta for the delivery of the messages.</span>
</span><span id="Producer.send-960"><a href="#Producer.send-960"><span class="linenos">960</span></a>
</span><span id="Producer.send-961"><a href="#Producer.send-961"><span class="linenos">961</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="Producer.send-962"><a href="#Producer.send-962"><span class="linenos">962</span></a> <span class="n">msg</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_build_msg</span><span class="p">(</span><span class="n">content</span><span class="p">,</span> <span class="n">properties</span><span class="p">,</span> <span class="n">partition_key</span><span class="p">,</span> <span class="n">sequence_id</span><span class="p">,</span>
</span><span id="Producer.send-963"><a href="#Producer.send-963"><span class="linenos">963</span></a> <span class="n">replication_clusters</span><span class="p">,</span> <span class="n">disable_replication</span><span class="p">,</span> <span class="n">event_timestamp</span><span class="p">,</span>
</span><span id="Producer.send-964"><a href="#Producer.send-964"><span class="linenos">964</span></a> <span class="n">deliver_at</span><span class="p">,</span> <span class="n">deliver_after</span><span class="p">)</span>
</span><span id="Producer.send-965"><a href="#Producer.send-965"><span class="linenos">965</span></a> <span class="k">return</span> <span class="n">MessageId</span><span class="o">.</span><span class="n">deserialize</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_producer</span><span class="o">.</span><span class="n">send</span><span class="p">(</span><span class="n">msg</span><span class="p">))</span>
</span></pre></div>
<div class="docstring"><p>Publish a message on the topic. Blocks until the message is acknowledged</p>
<p>Returns a <code><a href="#MessageId">MessageId</a></code> object that represents where the message is persisted.</p>
<p><strong>Args</strong></p>
<ul>
<li><code>content</code>:
A <code>bytes</code> object with the message payload.</li>
</ul>
<p><strong>Options</strong></p>
<ul>
<li><code>properties</code>:
A dict of application-defined string properties.</li>
<li><code>partition_key</code>:
Sets the partition key for message routing. A hash of this key is used
to determine the message's topic partition.</li>
<li><code>sequence_id</code>:
Specify a custom sequence id for the message being published.</li>
<li><code>replication_clusters</code>:
Override namespace replication clusters. Note that it is the caller's
responsibility to provide valid cluster names and that all clusters
have been previously configured as topics. Given an empty list,
the message will replicate according to the namespace configuration.</li>
<li><code>disable_replication</code>:
Do not replicate this message.</li>
<li><code>event_timestamp</code>:
Timestamp in millis of the timestamp of event creation</li>
<li><code>deliver_at</code>:
Specify the this message should not be delivered earlier than the
specified timestamp.
The timestamp is milliseconds and based on UTC</li>
<li><code>deliver_after</code>:
Specify a delay in timedelta for the delivery of the messages.</li>
</ul>
</div>
</div>
<div id="Producer.send_async" class="classattr">
<input id="Producer.send_async-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<div class="attr function">
<span class="def">def</span>
<span class="name">send_async</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="bp">self</span>,</span><span class="param"> <span class="n">content</span>,</span><span class="param"> <span class="n">callback</span>,</span><span class="param"> <span class="n">properties</span><span class="o">=</span><span class="kc">None</span>,</span><span class="param"> <span class="n">partition_key</span><span class="o">=</span><span class="kc">None</span>,</span><span class="param"> <span class="n">sequence_id</span><span class="o">=</span><span class="kc">None</span>,</span><span class="param"> <span class="n">replication_clusters</span><span class="o">=</span><span class="kc">None</span>,</span><span class="param"> <span class="n">disable_replication</span><span class="o">=</span><span class="kc">False</span>,</span><span class="param"> <span class="n">event_timestamp</span><span class="o">=</span><span class="kc">None</span>,</span><span class="param"> <span class="n">deliver_at</span><span class="o">=</span><span class="kc">None</span>,</span><span class="param"> <span class="n">deliver_after</span><span class="o">=</span><span class="kc">None</span></span><span class="return-annotation">):</span></span>
<label class="view-source-button" for="Producer.send_async-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#Producer.send_async"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="Producer.send_async-967"><a href="#Producer.send_async-967"><span class="linenos"> 967</span></a> <span class="k">def</span> <span class="nf">send_async</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">content</span><span class="p">,</span> <span class="n">callback</span><span class="p">,</span>
</span><span id="Producer.send_async-968"><a href="#Producer.send_async-968"><span class="linenos"> 968</span></a> <span class="n">properties</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
</span><span id="Producer.send_async-969"><a href="#Producer.send_async-969"><span class="linenos"> 969</span></a> <span class="n">partition_key</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
</span><span id="Producer.send_async-970"><a href="#Producer.send_async-970"><span class="linenos"> 970</span></a> <span class="n">sequence_id</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
</span><span id="Producer.send_async-971"><a href="#Producer.send_async-971"><span class="linenos"> 971</span></a> <span class="n">replication_clusters</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
</span><span id="Producer.send_async-972"><a href="#Producer.send_async-972"><span class="linenos"> 972</span></a> <span class="n">disable_replication</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
</span><span id="Producer.send_async-973"><a href="#Producer.send_async-973"><span class="linenos"> 973</span></a> <span class="n">event_timestamp</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
</span><span id="Producer.send_async-974"><a href="#Producer.send_async-974"><span class="linenos"> 974</span></a> <span class="n">deliver_at</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
</span><span id="Producer.send_async-975"><a href="#Producer.send_async-975"><span class="linenos"> 975</span></a> <span class="n">deliver_after</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
</span><span id="Producer.send_async-976"><a href="#Producer.send_async-976"><span class="linenos"> 976</span></a> <span class="p">):</span>
</span><span id="Producer.send_async-977"><a href="#Producer.send_async-977"><span class="linenos"> 977</span></a> <span class="sd">&quot;&quot;&quot;</span>
</span><span id="Producer.send_async-978"><a href="#Producer.send_async-978"><span class="linenos"> 978</span></a><span class="sd"> Send a message asynchronously.</span>
</span><span id="Producer.send_async-979"><a href="#Producer.send_async-979"><span class="linenos"> 979</span></a>
</span><span id="Producer.send_async-980"><a href="#Producer.send_async-980"><span class="linenos"> 980</span></a><span class="sd"> The `callback` will be invoked once the message has been acknowledged</span>
</span><span id="Producer.send_async-981"><a href="#Producer.send_async-981"><span class="linenos"> 981</span></a><span class="sd"> by the broker.</span>
</span><span id="Producer.send_async-982"><a href="#Producer.send_async-982"><span class="linenos"> 982</span></a>
</span><span id="Producer.send_async-983"><a href="#Producer.send_async-983"><span class="linenos"> 983</span></a><span class="sd"> Example:</span>
</span><span id="Producer.send_async-984"><a href="#Producer.send_async-984"><span class="linenos"> 984</span></a>
</span><span id="Producer.send_async-985"><a href="#Producer.send_async-985"><span class="linenos"> 985</span></a><span class="sd"> #!python</span>
</span><span id="Producer.send_async-986"><a href="#Producer.send_async-986"><span class="linenos"> 986</span></a><span class="sd"> def callback(res, msg_id):</span>
</span><span id="Producer.send_async-987"><a href="#Producer.send_async-987"><span class="linenos"> 987</span></a><span class="sd"> print(&#39;Message published: %s&#39; % res)</span>
</span><span id="Producer.send_async-988"><a href="#Producer.send_async-988"><span class="linenos"> 988</span></a>
</span><span id="Producer.send_async-989"><a href="#Producer.send_async-989"><span class="linenos"> 989</span></a><span class="sd"> producer.send_async(msg, callback)</span>
</span><span id="Producer.send_async-990"><a href="#Producer.send_async-990"><span class="linenos"> 990</span></a>
</span><span id="Producer.send_async-991"><a href="#Producer.send_async-991"><span class="linenos"> 991</span></a><span class="sd"> When the producer queue is full, by default the message will be rejected</span>
</span><span id="Producer.send_async-992"><a href="#Producer.send_async-992"><span class="linenos"> 992</span></a><span class="sd"> and the callback invoked with an error code.</span>
</span><span id="Producer.send_async-993"><a href="#Producer.send_async-993"><span class="linenos"> 993</span></a>
</span><span id="Producer.send_async-994"><a href="#Producer.send_async-994"><span class="linenos"> 994</span></a><span class="sd"> **Args**</span>
</span><span id="Producer.send_async-995"><a href="#Producer.send_async-995"><span class="linenos"> 995</span></a>
</span><span id="Producer.send_async-996"><a href="#Producer.send_async-996"><span class="linenos"> 996</span></a><span class="sd"> * `content`:</span>
</span><span id="Producer.send_async-997"><a href="#Producer.send_async-997"><span class="linenos"> 997</span></a><span class="sd"> A `bytes` object with the message payload.</span>
</span><span id="Producer.send_async-998"><a href="#Producer.send_async-998"><span class="linenos"> 998</span></a>
</span><span id="Producer.send_async-999"><a href="#Producer.send_async-999"><span class="linenos"> 999</span></a><span class="sd"> **Options**</span>
</span><span id="Producer.send_async-1000"><a href="#Producer.send_async-1000"><span class="linenos">1000</span></a>
</span><span id="Producer.send_async-1001"><a href="#Producer.send_async-1001"><span class="linenos">1001</span></a><span class="sd"> * `properties`:</span>
</span><span id="Producer.send_async-1002"><a href="#Producer.send_async-1002"><span class="linenos">1002</span></a><span class="sd"> A dict of application0-defined string properties.</span>
</span><span id="Producer.send_async-1003"><a href="#Producer.send_async-1003"><span class="linenos">1003</span></a><span class="sd"> * `partition_key`:</span>
</span><span id="Producer.send_async-1004"><a href="#Producer.send_async-1004"><span class="linenos">1004</span></a><span class="sd"> Sets the partition key for the message routing. A hash of this key is</span>
</span><span id="Producer.send_async-1005"><a href="#Producer.send_async-1005"><span class="linenos">1005</span></a><span class="sd"> used to determine the message&#39;s topic partition.</span>
</span><span id="Producer.send_async-1006"><a href="#Producer.send_async-1006"><span class="linenos">1006</span></a><span class="sd"> * `sequence_id`:</span>
</span><span id="Producer.send_async-1007"><a href="#Producer.send_async-1007"><span class="linenos">1007</span></a><span class="sd"> Specify a custom sequence id for the message being published.</span>
</span><span id="Producer.send_async-1008"><a href="#Producer.send_async-1008"><span class="linenos">1008</span></a><span class="sd"> * `replication_clusters`: Override namespace replication clusters. Note</span>
</span><span id="Producer.send_async-1009"><a href="#Producer.send_async-1009"><span class="linenos">1009</span></a><span class="sd"> that it is the caller&#39;s responsibility to provide valid cluster names</span>
</span><span id="Producer.send_async-1010"><a href="#Producer.send_async-1010"><span class="linenos">1010</span></a><span class="sd"> and that all clusters have been previously configured as topics.</span>
</span><span id="Producer.send_async-1011"><a href="#Producer.send_async-1011"><span class="linenos">1011</span></a><span class="sd"> Given an empty list, the message will replicate per the namespace</span>
</span><span id="Producer.send_async-1012"><a href="#Producer.send_async-1012"><span class="linenos">1012</span></a><span class="sd"> configuration.</span>
</span><span id="Producer.send_async-1013"><a href="#Producer.send_async-1013"><span class="linenos">1013</span></a><span class="sd"> * `disable_replication`:</span>
</span><span id="Producer.send_async-1014"><a href="#Producer.send_async-1014"><span class="linenos">1014</span></a><span class="sd"> Do not replicate this message.</span>
</span><span id="Producer.send_async-1015"><a href="#Producer.send_async-1015"><span class="linenos">1015</span></a><span class="sd"> * `event_timestamp`:</span>
</span><span id="Producer.send_async-1016"><a href="#Producer.send_async-1016"><span class="linenos">1016</span></a><span class="sd"> Timestamp in millis of the timestamp of event creation</span>
</span><span id="Producer.send_async-1017"><a href="#Producer.send_async-1017"><span class="linenos">1017</span></a><span class="sd"> * `deliver_at`:</span>
</span><span id="Producer.send_async-1018"><a href="#Producer.send_async-1018"><span class="linenos">1018</span></a><span class="sd"> Specify the this message should not be delivered earlier than the</span>
</span><span id="Producer.send_async-1019"><a href="#Producer.send_async-1019"><span class="linenos">1019</span></a><span class="sd"> specified timestamp.</span>
</span><span id="Producer.send_async-1020"><a href="#Producer.send_async-1020"><span class="linenos">1020</span></a><span class="sd"> The timestamp is milliseconds and based on UTC</span>
</span><span id="Producer.send_async-1021"><a href="#Producer.send_async-1021"><span class="linenos">1021</span></a><span class="sd"> * `deliver_after`:</span>
</span><span id="Producer.send_async-1022"><a href="#Producer.send_async-1022"><span class="linenos">1022</span></a><span class="sd"> Specify a delay in timedelta for the delivery of the messages.</span>
</span><span id="Producer.send_async-1023"><a href="#Producer.send_async-1023"><span class="linenos">1023</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="Producer.send_async-1024"><a href="#Producer.send_async-1024"><span class="linenos">1024</span></a> <span class="n">msg</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_build_msg</span><span class="p">(</span><span class="n">content</span><span class="p">,</span> <span class="n">properties</span><span class="p">,</span> <span class="n">partition_key</span><span class="p">,</span> <span class="n">sequence_id</span><span class="p">,</span>
</span><span id="Producer.send_async-1025"><a href="#Producer.send_async-1025"><span class="linenos">1025</span></a> <span class="n">replication_clusters</span><span class="p">,</span> <span class="n">disable_replication</span><span class="p">,</span> <span class="n">event_timestamp</span><span class="p">,</span>
</span><span id="Producer.send_async-1026"><a href="#Producer.send_async-1026"><span class="linenos">1026</span></a> <span class="n">deliver_at</span><span class="p">,</span> <span class="n">deliver_after</span><span class="p">)</span>
</span><span id="Producer.send_async-1027"><a href="#Producer.send_async-1027"><span class="linenos">1027</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_producer</span><span class="o">.</span><span class="n">send_async</span><span class="p">(</span><span class="n">msg</span><span class="p">,</span> <span class="n">callback</span><span class="p">)</span>
</span></pre></div>
<div class="docstring"><p>Send a message asynchronously.</p>
<p>The <code>callback</code> will be invoked once the message has been acknowledged
by the broker.</p>
<p>Example:</p>
<pre><code>#!python
def callback(res, msg_id):
print('Message published: %s' % res)
producer.send_async(msg, callback)
</code></pre>
<p>When the producer queue is full, by default the message will be rejected
and the callback invoked with an error code.</p>
<p><strong>Args</strong></p>
<ul>
<li><code>content</code>:
A <code>bytes</code> object with the message payload.</li>
</ul>
<p><strong>Options</strong></p>
<ul>
<li><code>properties</code>:
A dict of application0-defined string properties.</li>
<li><code>partition_key</code>:
Sets the partition key for the message routing. A hash of this key is
used to determine the message's topic partition.</li>
<li><code>sequence_id</code>:
Specify a custom sequence id for the message being published.</li>
<li><code>replication_clusters</code>: Override namespace replication clusters. Note
that it is the caller's responsibility to provide valid cluster names
and that all clusters have been previously configured as topics.
Given an empty list, the message will replicate per the namespace
configuration.</li>
<li><code>disable_replication</code>:
Do not replicate this message.</li>
<li><code>event_timestamp</code>:
Timestamp in millis of the timestamp of event creation</li>
<li><code>deliver_at</code>:
Specify the this message should not be delivered earlier than the
specified timestamp.
The timestamp is milliseconds and based on UTC</li>
<li><code>deliver_after</code>:
Specify a delay in timedelta for the delivery of the messages.</li>
</ul>
</div>
</div>
<div id="Producer.flush" class="classattr">
<input id="Producer.flush-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<div class="attr function">
<span class="def">def</span>
<span class="name">flush</span><span class="signature pdoc-code condensed">(<span class="param"><span class="bp">self</span></span><span class="return-annotation">):</span></span>
<label class="view-source-button" for="Producer.flush-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#Producer.flush"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="Producer.flush-1030"><a href="#Producer.flush-1030"><span class="linenos">1030</span></a> <span class="k">def</span> <span class="nf">flush</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
</span><span id="Producer.flush-1031"><a href="#Producer.flush-1031"><span class="linenos">1031</span></a> <span class="sd">&quot;&quot;&quot;</span>
</span><span id="Producer.flush-1032"><a href="#Producer.flush-1032"><span class="linenos">1032</span></a><span class="sd"> Flush all the messages buffered in the client and wait until all messages have been</span>
</span><span id="Producer.flush-1033"><a href="#Producer.flush-1033"><span class="linenos">1033</span></a><span class="sd"> successfully persisted</span>
</span><span id="Producer.flush-1034"><a href="#Producer.flush-1034"><span class="linenos">1034</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="Producer.flush-1035"><a href="#Producer.flush-1035"><span class="linenos">1035</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_producer</span><span class="o">.</span><span class="n">flush</span><span class="p">()</span>
</span></pre></div>
<div class="docstring"><p>Flush all the messages buffered in the client and wait until all messages have been
successfully persisted</p>
</div>
</div>
<div id="Producer.close" class="classattr">
<input id="Producer.close-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<div class="attr function">
<span class="def">def</span>
<span class="name">close</span><span class="signature pdoc-code condensed">(<span class="param"><span class="bp">self</span></span><span class="return-annotation">):</span></span>
<label class="view-source-button" for="Producer.close-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#Producer.close"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="Producer.close-1038"><a href="#Producer.close-1038"><span class="linenos">1038</span></a> <span class="k">def</span> <span class="nf">close</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
</span><span id="Producer.close-1039"><a href="#Producer.close-1039"><span class="linenos">1039</span></a> <span class="sd">&quot;&quot;&quot;</span>
</span><span id="Producer.close-1040"><a href="#Producer.close-1040"><span class="linenos">1040</span></a><span class="sd"> Close the producer.</span>
</span><span id="Producer.close-1041"><a href="#Producer.close-1041"><span class="linenos">1041</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="Producer.close-1042"><a href="#Producer.close-1042"><span class="linenos">1042</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_producer</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
</span></pre></div>
<div class="docstring"><p>Close the producer.</p>
</div>
</div>
</section>
<section id="Consumer">
<input id="Consumer-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<div class="attr class">
<span class="def">class</span>
<span class="name">Consumer</span>:
<label class="view-source-button" for="Consumer-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#Consumer"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="Consumer-1082"><a href="#Consumer-1082"><span class="linenos">1082</span></a><span class="k">class</span> <span class="nc">Consumer</span><span class="p">:</span>
</span><span id="Consumer-1083"><a href="#Consumer-1083"><span class="linenos">1083</span></a> <span class="sd">&quot;&quot;&quot;</span>
</span><span id="Consumer-1084"><a href="#Consumer-1084"><span class="linenos">1084</span></a><span class="sd"> Pulsar consumer.</span>
</span><span id="Consumer-1085"><a href="#Consumer-1085"><span class="linenos">1085</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="Consumer-1086"><a href="#Consumer-1086"><span class="linenos">1086</span></a>
</span><span id="Consumer-1087"><a href="#Consumer-1087"><span class="linenos">1087</span></a> <span class="k">def</span> <span class="nf">topic</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
</span><span id="Consumer-1088"><a href="#Consumer-1088"><span class="linenos">1088</span></a> <span class="sd">&quot;&quot;&quot;</span>
</span><span id="Consumer-1089"><a href="#Consumer-1089"><span class="linenos">1089</span></a><span class="sd"> Return the topic this consumer is subscribed to.</span>
</span><span id="Consumer-1090"><a href="#Consumer-1090"><span class="linenos">1090</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="Consumer-1091"><a href="#Consumer-1091"><span class="linenos">1091</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_consumer</span><span class="o">.</span><span class="n">topic</span><span class="p">()</span>
</span><span id="Consumer-1092"><a href="#Consumer-1092"><span class="linenos">1092</span></a>
</span><span id="Consumer-1093"><a href="#Consumer-1093"><span class="linenos">1093</span></a> <span class="k">def</span> <span class="nf">subscription_name</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
</span><span id="Consumer-1094"><a href="#Consumer-1094"><span class="linenos">1094</span></a> <span class="sd">&quot;&quot;&quot;</span>
</span><span id="Consumer-1095"><a href="#Consumer-1095"><span class="linenos">1095</span></a><span class="sd"> Return the subscription name.</span>
</span><span id="Consumer-1096"><a href="#Consumer-1096"><span class="linenos">1096</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="Consumer-1097"><a href="#Consumer-1097"><span class="linenos">1097</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_consumer</span><span class="o">.</span><span class="n">subscription_name</span><span class="p">()</span>
</span><span id="Consumer-1098"><a href="#Consumer-1098"><span class="linenos">1098</span></a>
</span><span id="Consumer-1099"><a href="#Consumer-1099"><span class="linenos">1099</span></a> <span class="k">def</span> <span class="nf">unsubscribe</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
</span><span id="Consumer-1100"><a href="#Consumer-1100"><span class="linenos">1100</span></a> <span class="sd">&quot;&quot;&quot;</span>
</span><span id="Consumer-1101"><a href="#Consumer-1101"><span class="linenos">1101</span></a><span class="sd"> Unsubscribe the current consumer from the topic.</span>
</span><span id="Consumer-1102"><a href="#Consumer-1102"><span class="linenos">1102</span></a>
</span><span id="Consumer-1103"><a href="#Consumer-1103"><span class="linenos">1103</span></a><span class="sd"> This method will block until the operation is completed. Once the</span>
</span><span id="Consumer-1104"><a href="#Consumer-1104"><span class="linenos">1104</span></a><span class="sd"> consumer is unsubscribed, no more messages will be received and</span>
</span><span id="Consumer-1105"><a href="#Consumer-1105"><span class="linenos">1105</span></a><span class="sd"> subsequent new messages will not be retained for this consumer.</span>
</span><span id="Consumer-1106"><a href="#Consumer-1106"><span class="linenos">1106</span></a>
</span><span id="Consumer-1107"><a href="#Consumer-1107"><span class="linenos">1107</span></a><span class="sd"> This consumer object cannot be reused.</span>
</span><span id="Consumer-1108"><a href="#Consumer-1108"><span class="linenos">1108</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="Consumer-1109"><a href="#Consumer-1109"><span class="linenos">1109</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_consumer</span><span class="o">.</span><span class="n">unsubscribe</span><span class="p">()</span>
</span><span id="Consumer-1110"><a href="#Consumer-1110"><span class="linenos">1110</span></a>
</span><span id="Consumer-1111"><a href="#Consumer-1111"><span class="linenos">1111</span></a> <span class="k">def</span> <span class="nf">receive</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">timeout_millis</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
</span><span id="Consumer-1112"><a href="#Consumer-1112"><span class="linenos">1112</span></a> <span class="sd">&quot;&quot;&quot;</span>
</span><span id="Consumer-1113"><a href="#Consumer-1113"><span class="linenos">1113</span></a><span class="sd"> Receive a single message.</span>
</span><span id="Consumer-1114"><a href="#Consumer-1114"><span class="linenos">1114</span></a>
</span><span id="Consumer-1115"><a href="#Consumer-1115"><span class="linenos">1115</span></a><span class="sd"> If a message is not immediately available, this method will block until</span>
</span><span id="Consumer-1116"><a href="#Consumer-1116"><span class="linenos">1116</span></a><span class="sd"> a new message is available.</span>
</span><span id="Consumer-1117"><a href="#Consumer-1117"><span class="linenos">1117</span></a>
</span><span id="Consumer-1118"><a href="#Consumer-1118"><span class="linenos">1118</span></a><span class="sd"> **Options**</span>
</span><span id="Consumer-1119"><a href="#Consumer-1119"><span class="linenos">1119</span></a>
</span><span id="Consumer-1120"><a href="#Consumer-1120"><span class="linenos">1120</span></a><span class="sd"> * `timeout_millis`:</span>
</span><span id="Consumer-1121"><a href="#Consumer-1121"><span class="linenos">1121</span></a><span class="sd"> If specified, the receive will raise an exception if a message is not</span>
</span><span id="Consumer-1122"><a href="#Consumer-1122"><span class="linenos">1122</span></a><span class="sd"> available within the timeout.</span>
</span><span id="Consumer-1123"><a href="#Consumer-1123"><span class="linenos">1123</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="Consumer-1124"><a href="#Consumer-1124"><span class="linenos">1124</span></a> <span class="k">if</span> <span class="n">timeout_millis</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
</span><span id="Consumer-1125"><a href="#Consumer-1125"><span class="linenos">1125</span></a> <span class="n">msg</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_consumer</span><span class="o">.</span><span class="n">receive</span><span class="p">()</span>
</span><span id="Consumer-1126"><a href="#Consumer-1126"><span class="linenos">1126</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="Consumer-1127"><a href="#Consumer-1127"><span class="linenos">1127</span></a> <span class="n">_check_type</span><span class="p">(</span><span class="nb">int</span><span class="p">,</span> <span class="n">timeout_millis</span><span class="p">,</span> <span class="s1">&#39;timeout_millis&#39;</span><span class="p">)</span>
</span><span id="Consumer-1128"><a href="#Consumer-1128"><span class="linenos">1128</span></a> <span class="n">msg</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_consumer</span><span class="o">.</span><span class="n">receive</span><span class="p">(</span><span class="n">timeout_millis</span><span class="p">)</span>
</span><span id="Consumer-1129"><a href="#Consumer-1129"><span class="linenos">1129</span></a>
</span><span id="Consumer-1130"><a href="#Consumer-1130"><span class="linenos">1130</span></a> <span class="n">m</span> <span class="o">=</span> <span class="n">Message</span><span class="p">()</span>
</span><span id="Consumer-1131"><a href="#Consumer-1131"><span class="linenos">1131</span></a> <span class="n">m</span><span class="o">.</span><span class="n">_message</span> <span class="o">=</span> <span class="n">msg</span>
</span><span id="Consumer-1132"><a href="#Consumer-1132"><span class="linenos">1132</span></a> <span class="n">m</span><span class="o">.</span><span class="n">_schema</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_schema</span>
</span><span id="Consumer-1133"><a href="#Consumer-1133"><span class="linenos">1133</span></a> <span class="k">return</span> <span class="n">m</span>
</span><span id="Consumer-1134"><a href="#Consumer-1134"><span class="linenos">1134</span></a>
</span><span id="Consumer-1135"><a href="#Consumer-1135"><span class="linenos">1135</span></a> <span class="k">def</span> <span class="nf">acknowledge</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">message</span><span class="p">):</span>
</span><span id="Consumer-1136"><a href="#Consumer-1136"><span class="linenos">1136</span></a> <span class="sd">&quot;&quot;&quot;</span>
</span><span id="Consumer-1137"><a href="#Consumer-1137"><span class="linenos">1137</span></a><span class="sd"> Acknowledge the reception of a single message.</span>
</span><span id="Consumer-1138"><a href="#Consumer-1138"><span class="linenos">1138</span></a>
</span><span id="Consumer-1139"><a href="#Consumer-1139"><span class="linenos">1139</span></a><span class="sd"> This method will block until an acknowledgement is sent to the broker.</span>
</span><span id="Consumer-1140"><a href="#Consumer-1140"><span class="linenos">1140</span></a><span class="sd"> After that, the message will not be re-delivered to this consumer.</span>
</span><span id="Consumer-1141"><a href="#Consumer-1141"><span class="linenos">1141</span></a>
</span><span id="Consumer-1142"><a href="#Consumer-1142"><span class="linenos">1142</span></a><span class="sd"> **Args**</span>
</span><span id="Consumer-1143"><a href="#Consumer-1143"><span class="linenos">1143</span></a>
</span><span id="Consumer-1144"><a href="#Consumer-1144"><span class="linenos">1144</span></a><span class="sd"> * `message`:</span>
</span><span id="Consumer-1145"><a href="#Consumer-1145"><span class="linenos">1145</span></a><span class="sd"> The received message or message id.</span>
</span><span id="Consumer-1146"><a href="#Consumer-1146"><span class="linenos">1146</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="Consumer-1147"><a href="#Consumer-1147"><span class="linenos">1147</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">message</span><span class="p">,</span> <span class="n">Message</span><span class="p">):</span>
</span><span id="Consumer-1148"><a href="#Consumer-1148"><span class="linenos">1148</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_consumer</span><span class="o">.</span><span class="n">acknowledge</span><span class="p">(</span><span class="n">message</span><span class="o">.</span><span class="n">_message</span><span class="p">)</span>
</span><span id="Consumer-1149"><a href="#Consumer-1149"><span class="linenos">1149</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="Consumer-1150"><a href="#Consumer-1150"><span class="linenos">1150</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_consumer</span><span class="o">.</span><span class="n">acknowledge</span><span class="p">(</span><span class="n">message</span><span class="p">)</span>
</span><span id="Consumer-1151"><a href="#Consumer-1151"><span class="linenos">1151</span></a>
</span><span id="Consumer-1152"><a href="#Consumer-1152"><span class="linenos">1152</span></a> <span class="k">def</span> <span class="nf">acknowledge_cumulative</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">message</span><span class="p">):</span>
</span><span id="Consumer-1153"><a href="#Consumer-1153"><span class="linenos">1153</span></a> <span class="sd">&quot;&quot;&quot;</span>
</span><span id="Consumer-1154"><a href="#Consumer-1154"><span class="linenos">1154</span></a><span class="sd"> Acknowledge the reception of all the messages in the stream up to (and</span>
</span><span id="Consumer-1155"><a href="#Consumer-1155"><span class="linenos">1155</span></a><span class="sd"> including) the provided message.</span>
</span><span id="Consumer-1156"><a href="#Consumer-1156"><span class="linenos">1156</span></a>
</span><span id="Consumer-1157"><a href="#Consumer-1157"><span class="linenos">1157</span></a><span class="sd"> This method will block until an acknowledgement is sent to the broker.</span>
</span><span id="Consumer-1158"><a href="#Consumer-1158"><span class="linenos">1158</span></a><span class="sd"> After that, the messages will not be re-delivered to this consumer.</span>
</span><span id="Consumer-1159"><a href="#Consumer-1159"><span class="linenos">1159</span></a>
</span><span id="Consumer-1160"><a href="#Consumer-1160"><span class="linenos">1160</span></a><span class="sd"> **Args**</span>
</span><span id="Consumer-1161"><a href="#Consumer-1161"><span class="linenos">1161</span></a>
</span><span id="Consumer-1162"><a href="#Consumer-1162"><span class="linenos">1162</span></a><span class="sd"> * `message`:</span>
</span><span id="Consumer-1163"><a href="#Consumer-1163"><span class="linenos">1163</span></a><span class="sd"> The received message or message id.</span>
</span><span id="Consumer-1164"><a href="#Consumer-1164"><span class="linenos">1164</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="Consumer-1165"><a href="#Consumer-1165"><span class="linenos">1165</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">message</span><span class="p">,</span> <span class="n">Message</span><span class="p">):</span>
</span><span id="Consumer-1166"><a href="#Consumer-1166"><span class="linenos">1166</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_consumer</span><span class="o">.</span><span class="n">acknowledge_cumulative</span><span class="p">(</span><span class="n">message</span><span class="o">.</span><span class="n">_message</span><span class="p">)</span>
</span><span id="Consumer-1167"><a href="#Consumer-1167"><span class="linenos">1167</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="Consumer-1168"><a href="#Consumer-1168"><span class="linenos">1168</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_consumer</span><span class="o">.</span><span class="n">acknowledge_cumulative</span><span class="p">(</span><span class="n">message</span><span class="p">)</span>
</span><span id="Consumer-1169"><a href="#Consumer-1169"><span class="linenos">1169</span></a>
</span><span id="Consumer-1170"><a href="#Consumer-1170"><span class="linenos">1170</span></a> <span class="k">def</span> <span class="nf">negative_acknowledge</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">message</span><span class="p">):</span>
</span><span id="Consumer-1171"><a href="#Consumer-1171"><span class="linenos">1171</span></a> <span class="sd">&quot;&quot;&quot;</span>
</span><span id="Consumer-1172"><a href="#Consumer-1172"><span class="linenos">1172</span></a><span class="sd"> Acknowledge the failure to process a single message.</span>
</span><span id="Consumer-1173"><a href="#Consumer-1173"><span class="linenos">1173</span></a>
</span><span id="Consumer-1174"><a href="#Consumer-1174"><span class="linenos">1174</span></a><span class="sd"> When a message is &quot;negatively acked&quot; it will be marked for redelivery after</span>
</span><span id="Consumer-1175"><a href="#Consumer-1175"><span class="linenos">1175</span></a><span class="sd"> some fixed delay. The delay is configurable when constructing the consumer</span>
</span><span id="Consumer-1176"><a href="#Consumer-1176"><span class="linenos">1176</span></a><span class="sd"> with {@link ConsumerConfiguration#setNegativeAckRedeliveryDelayMs}.</span>
</span><span id="Consumer-1177"><a href="#Consumer-1177"><span class="linenos">1177</span></a>
</span><span id="Consumer-1178"><a href="#Consumer-1178"><span class="linenos">1178</span></a><span class="sd"> This call is not blocking.</span>
</span><span id="Consumer-1179"><a href="#Consumer-1179"><span class="linenos">1179</span></a>
</span><span id="Consumer-1180"><a href="#Consumer-1180"><span class="linenos">1180</span></a><span class="sd"> **Args**</span>
</span><span id="Consumer-1181"><a href="#Consumer-1181"><span class="linenos">1181</span></a>
</span><span id="Consumer-1182"><a href="#Consumer-1182"><span class="linenos">1182</span></a><span class="sd"> * `message`:</span>
</span><span id="Consumer-1183"><a href="#Consumer-1183"><span class="linenos">1183</span></a><span class="sd"> The received message or message id.</span>
</span><span id="Consumer-1184"><a href="#Consumer-1184"><span class="linenos">1184</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="Consumer-1185"><a href="#Consumer-1185"><span class="linenos">1185</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">message</span><span class="p">,</span> <span class="n">Message</span><span class="p">):</span>
</span><span id="Consumer-1186"><a href="#Consumer-1186"><span class="linenos">1186</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_consumer</span><span class="o">.</span><span class="n">negative_acknowledge</span><span class="p">(</span><span class="n">message</span><span class="o">.</span><span class="n">_message</span><span class="p">)</span>
</span><span id="Consumer-1187"><a href="#Consumer-1187"><span class="linenos">1187</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="Consumer-1188"><a href="#Consumer-1188"><span class="linenos">1188</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_consumer</span><span class="o">.</span><span class="n">negative_acknowledge</span><span class="p">(</span><span class="n">message</span><span class="p">)</span>
</span><span id="Consumer-1189"><a href="#Consumer-1189"><span class="linenos">1189</span></a>
</span><span id="Consumer-1190"><a href="#Consumer-1190"><span class="linenos">1190</span></a> <span class="k">def</span> <span class="nf">pause_message_listener</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
</span><span id="Consumer-1191"><a href="#Consumer-1191"><span class="linenos">1191</span></a> <span class="sd">&quot;&quot;&quot;</span>
</span><span id="Consumer-1192"><a href="#Consumer-1192"><span class="linenos">1192</span></a><span class="sd"> Pause receiving messages via the `message_listener` until</span>
</span><span id="Consumer-1193"><a href="#Consumer-1193"><span class="linenos">1193</span></a><span class="sd"> `resume_message_listener()` is called.</span>
</span><span id="Consumer-1194"><a href="#Consumer-1194"><span class="linenos">1194</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="Consumer-1195"><a href="#Consumer-1195"><span class="linenos">1195</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_consumer</span><span class="o">.</span><span class="n">pause_message_listener</span><span class="p">()</span>
</span><span id="Consumer-1196"><a href="#Consumer-1196"><span class="linenos">1196</span></a>
</span><span id="Consumer-1197"><a href="#Consumer-1197"><span class="linenos">1197</span></a> <span class="k">def</span> <span class="nf">resume_message_listener</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
</span><span id="Consumer-1198"><a href="#Consumer-1198"><span class="linenos">1198</span></a> <span class="sd">&quot;&quot;&quot;</span>
</span><span id="Consumer-1199"><a href="#Consumer-1199"><span class="linenos">1199</span></a><span class="sd"> Resume receiving the messages via the message listener.</span>
</span><span id="Consumer-1200"><a href="#Consumer-1200"><span class="linenos">1200</span></a><span class="sd"> Asynchronously receive all the messages enqueued from the time</span>
</span><span id="Consumer-1201"><a href="#Consumer-1201"><span class="linenos">1201</span></a><span class="sd"> `pause_message_listener()` was called.</span>
</span><span id="Consumer-1202"><a href="#Consumer-1202"><span class="linenos">1202</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="Consumer-1203"><a href="#Consumer-1203"><span class="linenos">1203</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_consumer</span><span class="o">.</span><span class="n">resume_message_listener</span><span class="p">()</span>
</span><span id="Consumer-1204"><a href="#Consumer-1204"><span class="linenos">1204</span></a>
</span><span id="Consumer-1205"><a href="#Consumer-1205"><span class="linenos">1205</span></a> <span class="k">def</span> <span class="nf">redeliver_unacknowledged_messages</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
</span><span id="Consumer-1206"><a href="#Consumer-1206"><span class="linenos">1206</span></a> <span class="sd">&quot;&quot;&quot;</span>
</span><span id="Consumer-1207"><a href="#Consumer-1207"><span class="linenos">1207</span></a><span class="sd"> Redelivers all the unacknowledged messages. In failover mode, the</span>
</span><span id="Consumer-1208"><a href="#Consumer-1208"><span class="linenos">1208</span></a><span class="sd"> request is ignored if the consumer is not active for the given topic. In</span>
</span><span id="Consumer-1209"><a href="#Consumer-1209"><span class="linenos">1209</span></a><span class="sd"> shared mode, the consumer&#39;s messages to be redelivered are distributed</span>
</span><span id="Consumer-1210"><a href="#Consumer-1210"><span class="linenos">1210</span></a><span class="sd"> across all the connected consumers. This is a non-blocking call and</span>
</span><span id="Consumer-1211"><a href="#Consumer-1211"><span class="linenos">1211</span></a><span class="sd"> doesn&#39;t throw an exception. In case the connection breaks, the messages</span>
</span><span id="Consumer-1212"><a href="#Consumer-1212"><span class="linenos">1212</span></a><span class="sd"> are redelivered after reconnect.</span>
</span><span id="Consumer-1213"><a href="#Consumer-1213"><span class="linenos">1213</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="Consumer-1214"><a href="#Consumer-1214"><span class="linenos">1214</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_consumer</span><span class="o">.</span><span class="n">redeliver_unacknowledged_messages</span><span class="p">()</span>
</span><span id="Consumer-1215"><a href="#Consumer-1215"><span class="linenos">1215</span></a>
</span><span id="Consumer-1216"><a href="#Consumer-1216"><span class="linenos">1216</span></a> <span class="k">def</span> <span class="nf">seek</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">messageid</span><span class="p">):</span>
</span><span id="Consumer-1217"><a href="#Consumer-1217"><span class="linenos">1217</span></a> <span class="sd">&quot;&quot;&quot;</span>
</span><span id="Consumer-1218"><a href="#Consumer-1218"><span class="linenos">1218</span></a><span class="sd"> Reset the subscription associated with this consumer to a specific message id or publish timestamp.</span>
</span><span id="Consumer-1219"><a href="#Consumer-1219"><span class="linenos">1219</span></a><span class="sd"> The message id can either be a specific message or represent the first or last messages in the topic.</span>
</span><span id="Consumer-1220"><a href="#Consumer-1220"><span class="linenos">1220</span></a><span class="sd"> Note: this operation can only be done on non-partitioned topics. For these, one can rather perform the</span>
</span><span id="Consumer-1221"><a href="#Consumer-1221"><span class="linenos">1221</span></a><span class="sd"> seek() on the individual partitions.</span>
</span><span id="Consumer-1222"><a href="#Consumer-1222"><span class="linenos">1222</span></a>
</span><span id="Consumer-1223"><a href="#Consumer-1223"><span class="linenos">1223</span></a><span class="sd"> **Args**</span>
</span><span id="Consumer-1224"><a href="#Consumer-1224"><span class="linenos">1224</span></a>
</span><span id="Consumer-1225"><a href="#Consumer-1225"><span class="linenos">1225</span></a><span class="sd"> * `message`:</span>
</span><span id="Consumer-1226"><a href="#Consumer-1226"><span class="linenos">1226</span></a><span class="sd"> The message id for seek, OR an integer event time to seek to</span>
</span><span id="Consumer-1227"><a href="#Consumer-1227"><span class="linenos">1227</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="Consumer-1228"><a href="#Consumer-1228"><span class="linenos">1228</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_consumer</span><span class="o">.</span><span class="n">seek</span><span class="p">(</span><span class="n">messageid</span><span class="p">)</span>
</span><span id="Consumer-1229"><a href="#Consumer-1229"><span class="linenos">1229</span></a>
</span><span id="Consumer-1230"><a href="#Consumer-1230"><span class="linenos">1230</span></a> <span class="k">def</span> <span class="nf">close</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
</span><span id="Consumer-1231"><a href="#Consumer-1231"><span class="linenos">1231</span></a> <span class="sd">&quot;&quot;&quot;</span>
</span><span id="Consumer-1232"><a href="#Consumer-1232"><span class="linenos">1232</span></a><span class="sd"> Close the consumer.</span>
</span><span id="Consumer-1233"><a href="#Consumer-1233"><span class="linenos">1233</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="Consumer-1234"><a href="#Consumer-1234"><span class="linenos">1234</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_consumer</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
</span><span id="Consumer-1235"><a href="#Consumer-1235"><span class="linenos">1235</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_client</span><span class="o">.</span><span class="n">_consumers</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>
</span></pre></div>
<div class="docstring"><p>Pulsar consumer.</p>
</div>
<div id="Consumer.__init__" class="classattr">
<div class="attr function">
<span class="name">Consumer</span><span class="signature pdoc-code condensed">()</span>
</div>
<a class="headerlink" href="#Consumer.__init__"></a>
</div>
<div id="Consumer.topic" class="classattr">
<input id="Consumer.topic-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<div class="attr function">
<span class="def">def</span>
<span class="name">topic</span><span class="signature pdoc-code condensed">(<span class="param"><span class="bp">self</span></span><span class="return-annotation">):</span></span>
<label class="view-source-button" for="Consumer.topic-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#Consumer.topic"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="Consumer.topic-1087"><a href="#Consumer.topic-1087"><span class="linenos">1087</span></a> <span class="k">def</span> <span class="nf">topic</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
</span><span id="Consumer.topic-1088"><a href="#Consumer.topic-1088"><span class="linenos">1088</span></a> <span class="sd">&quot;&quot;&quot;</span>
</span><span id="Consumer.topic-1089"><a href="#Consumer.topic-1089"><span class="linenos">1089</span></a><span class="sd"> Return the topic this consumer is subscribed to.</span>
</span><span id="Consumer.topic-1090"><a href="#Consumer.topic-1090"><span class="linenos">1090</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="Consumer.topic-1091"><a href="#Consumer.topic-1091"><span class="linenos">1091</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_consumer</span><span class="o">.</span><span class="n">topic</span><span class="p">()</span>
</span></pre></div>
<div class="docstring"><p>Return the topic this consumer is subscribed to.</p>
</div>
</div>
<div id="Consumer.subscription_name" class="classattr">
<input id="Consumer.subscription_name-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<div class="attr function">
<span class="def">def</span>
<span class="name">subscription_name</span><span class="signature pdoc-code condensed">(<span class="param"><span class="bp">self</span></span><span class="return-annotation">):</span></span>
<label class="view-source-button" for="Consumer.subscription_name-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#Consumer.subscription_name"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="Consumer.subscription_name-1093"><a href="#Consumer.subscription_name-1093"><span class="linenos">1093</span></a> <span class="k">def</span> <span class="nf">subscription_name</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
</span><span id="Consumer.subscription_name-1094"><a href="#Consumer.subscription_name-1094"><span class="linenos">1094</span></a> <span class="sd">&quot;&quot;&quot;</span>
</span><span id="Consumer.subscription_name-1095"><a href="#Consumer.subscription_name-1095"><span class="linenos">1095</span></a><span class="sd"> Return the subscription name.</span>
</span><span id="Consumer.subscription_name-1096"><a href="#Consumer.subscription_name-1096"><span class="linenos">1096</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="Consumer.subscription_name-1097"><a href="#Consumer.subscription_name-1097"><span class="linenos">1097</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_consumer</span><span class="o">.</span><span class="n">subscription_name</span><span class="p">()</span>
</span></pre></div>
<div class="docstring"><p>Return the subscription name.</p>
</div>
</div>
<div id="Consumer.unsubscribe" class="classattr">
<input id="Consumer.unsubscribe-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<div class="attr function">
<span class="def">def</span>
<span class="name">unsubscribe</span><span class="signature pdoc-code condensed">(<span class="param"><span class="bp">self</span></span><span class="return-annotation">):</span></span>
<label class="view-source-button" for="Consumer.unsubscribe-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#Consumer.unsubscribe"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="Consumer.unsubscribe-1099"><a href="#Consumer.unsubscribe-1099"><span class="linenos">1099</span></a> <span class="k">def</span> <span class="nf">unsubscribe</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
</span><span id="Consumer.unsubscribe-1100"><a href="#Consumer.unsubscribe-1100"><span class="linenos">1100</span></a> <span class="sd">&quot;&quot;&quot;</span>
</span><span id="Consumer.unsubscribe-1101"><a href="#Consumer.unsubscribe-1101"><span class="linenos">1101</span></a><span class="sd"> Unsubscribe the current consumer from the topic.</span>
</span><span id="Consumer.unsubscribe-1102"><a href="#Consumer.unsubscribe-1102"><span class="linenos">1102</span></a>
</span><span id="Consumer.unsubscribe-1103"><a href="#Consumer.unsubscribe-1103"><span class="linenos">1103</span></a><span class="sd"> This method will block until the operation is completed. Once the</span>
</span><span id="Consumer.unsubscribe-1104"><a href="#Consumer.unsubscribe-1104"><span class="linenos">1104</span></a><span class="sd"> consumer is unsubscribed, no more messages will be received and</span>
</span><span id="Consumer.unsubscribe-1105"><a href="#Consumer.unsubscribe-1105"><span class="linenos">1105</span></a><span class="sd"> subsequent new messages will not be retained for this consumer.</span>
</span><span id="Consumer.unsubscribe-1106"><a href="#Consumer.unsubscribe-1106"><span class="linenos">1106</span></a>
</span><span id="Consumer.unsubscribe-1107"><a href="#Consumer.unsubscribe-1107"><span class="linenos">1107</span></a><span class="sd"> This consumer object cannot be reused.</span>
</span><span id="Consumer.unsubscribe-1108"><a href="#Consumer.unsubscribe-1108"><span class="linenos">1108</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="Consumer.unsubscribe-1109"><a href="#Consumer.unsubscribe-1109"><span class="linenos">1109</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_consumer</span><span class="o">.</span><span class="n">unsubscribe</span><span class="p">()</span>
</span></pre></div>
<div class="docstring"><p>Unsubscribe the current consumer from the topic.</p>
<p>This method will block until the operation is completed. Once the
consumer is unsubscribed, no more messages will be received and
subsequent new messages will not be retained for this consumer.</p>
<p>This consumer object cannot be reused.</p>
</div>
</div>
<div id="Consumer.receive" class="classattr">
<input id="Consumer.receive-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<div class="attr function">
<span class="def">def</span>
<span class="name">receive</span><span class="signature pdoc-code condensed">(<span class="param"><span class="bp">self</span>, </span><span class="param"><span class="n">timeout_millis</span><span class="o">=</span><span class="kc">None</span></span><span class="return-annotation">):</span></span>
<label class="view-source-button" for="Consumer.receive-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#Consumer.receive"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="Consumer.receive-1111"><a href="#Consumer.receive-1111"><span class="linenos">1111</span></a> <span class="k">def</span> <span class="nf">receive</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">timeout_millis</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
</span><span id="Consumer.receive-1112"><a href="#Consumer.receive-1112"><span class="linenos">1112</span></a> <span class="sd">&quot;&quot;&quot;</span>
</span><span id="Consumer.receive-1113"><a href="#Consumer.receive-1113"><span class="linenos">1113</span></a><span class="sd"> Receive a single message.</span>
</span><span id="Consumer.receive-1114"><a href="#Consumer.receive-1114"><span class="linenos">1114</span></a>
</span><span id="Consumer.receive-1115"><a href="#Consumer.receive-1115"><span class="linenos">1115</span></a><span class="sd"> If a message is not immediately available, this method will block until</span>
</span><span id="Consumer.receive-1116"><a href="#Consumer.receive-1116"><span class="linenos">1116</span></a><span class="sd"> a new message is available.</span>
</span><span id="Consumer.receive-1117"><a href="#Consumer.receive-1117"><span class="linenos">1117</span></a>
</span><span id="Consumer.receive-1118"><a href="#Consumer.receive-1118"><span class="linenos">1118</span></a><span class="sd"> **Options**</span>
</span><span id="Consumer.receive-1119"><a href="#Consumer.receive-1119"><span class="linenos">1119</span></a>
</span><span id="Consumer.receive-1120"><a href="#Consumer.receive-1120"><span class="linenos">1120</span></a><span class="sd"> * `timeout_millis`:</span>
</span><span id="Consumer.receive-1121"><a href="#Consumer.receive-1121"><span class="linenos">1121</span></a><span class="sd"> If specified, the receive will raise an exception if a message is not</span>
</span><span id="Consumer.receive-1122"><a href="#Consumer.receive-1122"><span class="linenos">1122</span></a><span class="sd"> available within the timeout.</span>
</span><span id="Consumer.receive-1123"><a href="#Consumer.receive-1123"><span class="linenos">1123</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="Consumer.receive-1124"><a href="#Consumer.receive-1124"><span class="linenos">1124</span></a> <span class="k">if</span> <span class="n">timeout_millis</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
</span><span id="Consumer.receive-1125"><a href="#Consumer.receive-1125"><span class="linenos">1125</span></a> <span class="n">msg</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_consumer</span><span class="o">.</span><span class="n">receive</span><span class="p">()</span>
</span><span id="Consumer.receive-1126"><a href="#Consumer.receive-1126"><span class="linenos">1126</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="Consumer.receive-1127"><a href="#Consumer.receive-1127"><span class="linenos">1127</span></a> <span class="n">_check_type</span><span class="p">(</span><span class="nb">int</span><span class="p">,</span> <span class="n">timeout_millis</span><span class="p">,</span> <span class="s1">&#39;timeout_millis&#39;</span><span class="p">)</span>
</span><span id="Consumer.receive-1128"><a href="#Consumer.receive-1128"><span class="linenos">1128</span></a> <span class="n">msg</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_consumer</span><span class="o">.</span><span class="n">receive</span><span class="p">(</span><span class="n">timeout_millis</span><span class="p">)</span>
</span><span id="Consumer.receive-1129"><a href="#Consumer.receive-1129"><span class="linenos">1129</span></a>
</span><span id="Consumer.receive-1130"><a href="#Consumer.receive-1130"><span class="linenos">1130</span></a> <span class="n">m</span> <span class="o">=</span> <span class="n">Message</span><span class="p">()</span>
</span><span id="Consumer.receive-1131"><a href="#Consumer.receive-1131"><span class="linenos">1131</span></a> <span class="n">m</span><span class="o">.</span><span class="n">_message</span> <span class="o">=</span> <span class="n">msg</span>
</span><span id="Consumer.receive-1132"><a href="#Consumer.receive-1132"><span class="linenos">1132</span></a> <span class="n">m</span><span class="o">.</span><span class="n">_schema</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_schema</span>
</span><span id="Consumer.receive-1133"><a href="#Consumer.receive-1133"><span class="linenos">1133</span></a> <span class="k">return</span> <span class="n">m</span>
</span></pre></div>
<div class="docstring"><p>Receive a single message.</p>
<p>If a message is not immediately available, this method will block until
a new message is available.</p>
<p><strong>Options</strong></p>
<ul>
<li><code>timeout_millis</code>:
If specified, the receive will raise an exception if a message is not
available within the timeout.</li>
</ul>
</div>
</div>
<div id="Consumer.acknowledge" class="classattr">
<input id="Consumer.acknowledge-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<div class="attr function">
<span class="def">def</span>
<span class="name">acknowledge</span><span class="signature pdoc-code condensed">(<span class="param"><span class="bp">self</span>, </span><span class="param"><span class="n">message</span></span><span class="return-annotation">):</span></span>
<label class="view-source-button" for="Consumer.acknowledge-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#Consumer.acknowledge"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="Consumer.acknowledge-1135"><a href="#Consumer.acknowledge-1135"><span class="linenos">1135</span></a> <span class="k">def</span> <span class="nf">acknowledge</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">message</span><span class="p">):</span>
</span><span id="Consumer.acknowledge-1136"><a href="#Consumer.acknowledge-1136"><span class="linenos">1136</span></a> <span class="sd">&quot;&quot;&quot;</span>
</span><span id="Consumer.acknowledge-1137"><a href="#Consumer.acknowledge-1137"><span class="linenos">1137</span></a><span class="sd"> Acknowledge the reception of a single message.</span>
</span><span id="Consumer.acknowledge-1138"><a href="#Consumer.acknowledge-1138"><span class="linenos">1138</span></a>
</span><span id="Consumer.acknowledge-1139"><a href="#Consumer.acknowledge-1139"><span class="linenos">1139</span></a><span class="sd"> This method will block until an acknowledgement is sent to the broker.</span>
</span><span id="Consumer.acknowledge-1140"><a href="#Consumer.acknowledge-1140"><span class="linenos">1140</span></a><span class="sd"> After that, the message will not be re-delivered to this consumer.</span>
</span><span id="Consumer.acknowledge-1141"><a href="#Consumer.acknowledge-1141"><span class="linenos">1141</span></a>
</span><span id="Consumer.acknowledge-1142"><a href="#Consumer.acknowledge-1142"><span class="linenos">1142</span></a><span class="sd"> **Args**</span>
</span><span id="Consumer.acknowledge-1143"><a href="#Consumer.acknowledge-1143"><span class="linenos">1143</span></a>
</span><span id="Consumer.acknowledge-1144"><a href="#Consumer.acknowledge-1144"><span class="linenos">1144</span></a><span class="sd"> * `message`:</span>
</span><span id="Consumer.acknowledge-1145"><a href="#Consumer.acknowledge-1145"><span class="linenos">1145</span></a><span class="sd"> The received message or message id.</span>
</span><span id="Consumer.acknowledge-1146"><a href="#Consumer.acknowledge-1146"><span class="linenos">1146</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="Consumer.acknowledge-1147"><a href="#Consumer.acknowledge-1147"><span class="linenos">1147</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">message</span><span class="p">,</span> <span class="n">Message</span><span class="p">):</span>
</span><span id="Consumer.acknowledge-1148"><a href="#Consumer.acknowledge-1148"><span class="linenos">1148</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_consumer</span><span class="o">.</span><span class="n">acknowledge</span><span class="p">(</span><span class="n">message</span><span class="o">.</span><span class="n">_message</span><span class="p">)</span>
</span><span id="Consumer.acknowledge-1149"><a href="#Consumer.acknowledge-1149"><span class="linenos">1149</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="Consumer.acknowledge-1150"><a href="#Consumer.acknowledge-1150"><span class="linenos">1150</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_consumer</span><span class="o">.</span><span class="n">acknowledge</span><span class="p">(</span><span class="n">message</span><span class="p">)</span>
</span></pre></div>
<div class="docstring"><p>Acknowledge the reception of a single message.</p>
<p>This method will block until an acknowledgement is sent to the broker.
After that, the message will not be re-delivered to this consumer.</p>
<p><strong>Args</strong></p>
<ul>
<li><code>message</code>:
The received message or message id.</li>
</ul>
</div>
</div>
<div id="Consumer.acknowledge_cumulative" class="classattr">
<input id="Consumer.acknowledge_cumulative-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<div class="attr function">
<span class="def">def</span>
<span class="name">acknowledge_cumulative</span><span class="signature pdoc-code condensed">(<span class="param"><span class="bp">self</span>, </span><span class="param"><span class="n">message</span></span><span class="return-annotation">):</span></span>
<label class="view-source-button" for="Consumer.acknowledge_cumulative-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#Consumer.acknowledge_cumulative"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="Consumer.acknowledge_cumulative-1152"><a href="#Consumer.acknowledge_cumulative-1152"><span class="linenos">1152</span></a> <span class="k">def</span> <span class="nf">acknowledge_cumulative</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">message</span><span class="p">):</span>
</span><span id="Consumer.acknowledge_cumulative-1153"><a href="#Consumer.acknowledge_cumulative-1153"><span class="linenos">1153</span></a> <span class="sd">&quot;&quot;&quot;</span>
</span><span id="Consumer.acknowledge_cumulative-1154"><a href="#Consumer.acknowledge_cumulative-1154"><span class="linenos">1154</span></a><span class="sd"> Acknowledge the reception of all the messages in the stream up to (and</span>
</span><span id="Consumer.acknowledge_cumulative-1155"><a href="#Consumer.acknowledge_cumulative-1155"><span class="linenos">1155</span></a><span class="sd"> including) the provided message.</span>
</span><span id="Consumer.acknowledge_cumulative-1156"><a href="#Consumer.acknowledge_cumulative-1156"><span class="linenos">1156</span></a>
</span><span id="Consumer.acknowledge_cumulative-1157"><a href="#Consumer.acknowledge_cumulative-1157"><span class="linenos">1157</span></a><span class="sd"> This method will block until an acknowledgement is sent to the broker.</span>
</span><span id="Consumer.acknowledge_cumulative-1158"><a href="#Consumer.acknowledge_cumulative-1158"><span class="linenos">1158</span></a><span class="sd"> After that, the messages will not be re-delivered to this consumer.</span>
</span><span id="Consumer.acknowledge_cumulative-1159"><a href="#Consumer.acknowledge_cumulative-1159"><span class="linenos">1159</span></a>
</span><span id="Consumer.acknowledge_cumulative-1160"><a href="#Consumer.acknowledge_cumulative-1160"><span class="linenos">1160</span></a><span class="sd"> **Args**</span>
</span><span id="Consumer.acknowledge_cumulative-1161"><a href="#Consumer.acknowledge_cumulative-1161"><span class="linenos">1161</span></a>
</span><span id="Consumer.acknowledge_cumulative-1162"><a href="#Consumer.acknowledge_cumulative-1162"><span class="linenos">1162</span></a><span class="sd"> * `message`:</span>
</span><span id="Consumer.acknowledge_cumulative-1163"><a href="#Consumer.acknowledge_cumulative-1163"><span class="linenos">1163</span></a><span class="sd"> The received message or message id.</span>
</span><span id="Consumer.acknowledge_cumulative-1164"><a href="#Consumer.acknowledge_cumulative-1164"><span class="linenos">1164</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="Consumer.acknowledge_cumulative-1165"><a href="#Consumer.acknowledge_cumulative-1165"><span class="linenos">1165</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">message</span><span class="p">,</span> <span class="n">Message</span><span class="p">):</span>
</span><span id="Consumer.acknowledge_cumulative-1166"><a href="#Consumer.acknowledge_cumulative-1166"><span class="linenos">1166</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_consumer</span><span class="o">.</span><span class="n">acknowledge_cumulative</span><span class="p">(</span><span class="n">message</span><span class="o">.</span><span class="n">_message</span><span class="p">)</span>
</span><span id="Consumer.acknowledge_cumulative-1167"><a href="#Consumer.acknowledge_cumulative-1167"><span class="linenos">1167</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="Consumer.acknowledge_cumulative-1168"><a href="#Consumer.acknowledge_cumulative-1168"><span class="linenos">1168</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_consumer</span><span class="o">.</span><span class="n">acknowledge_cumulative</span><span class="p">(</span><span class="n">message</span><span class="p">)</span>
</span></pre></div>
<div class="docstring"><p>Acknowledge the reception of all the messages in the stream up to (and
including) the provided message.</p>
<p>This method will block until an acknowledgement is sent to the broker.
After that, the messages will not be re-delivered to this consumer.</p>
<p><strong>Args</strong></p>
<ul>
<li><code>message</code>:
The received message or message id.</li>
</ul>
</div>
</div>
<div id="Consumer.negative_acknowledge" class="classattr">
<input id="Consumer.negative_acknowledge-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<div class="attr function">
<span class="def">def</span>
<span class="name">negative_acknowledge</span><span class="signature pdoc-code condensed">(<span class="param"><span class="bp">self</span>, </span><span class="param"><span class="n">message</span></span><span class="return-annotation">):</span></span>
<label class="view-source-button" for="Consumer.negative_acknowledge-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#Consumer.negative_acknowledge"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="Consumer.negative_acknowledge-1170"><a href="#Consumer.negative_acknowledge-1170"><span class="linenos">1170</span></a> <span class="k">def</span> <span class="nf">negative_acknowledge</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">message</span><span class="p">):</span>
</span><span id="Consumer.negative_acknowledge-1171"><a href="#Consumer.negative_acknowledge-1171"><span class="linenos">1171</span></a> <span class="sd">&quot;&quot;&quot;</span>
</span><span id="Consumer.negative_acknowledge-1172"><a href="#Consumer.negative_acknowledge-1172"><span class="linenos">1172</span></a><span class="sd"> Acknowledge the failure to process a single message.</span>
</span><span id="Consumer.negative_acknowledge-1173"><a href="#Consumer.negative_acknowledge-1173"><span class="linenos">1173</span></a>
</span><span id="Consumer.negative_acknowledge-1174"><a href="#Consumer.negative_acknowledge-1174"><span class="linenos">1174</span></a><span class="sd"> When a message is &quot;negatively acked&quot; it will be marked for redelivery after</span>
</span><span id="Consumer.negative_acknowledge-1175"><a href="#Consumer.negative_acknowledge-1175"><span class="linenos">1175</span></a><span class="sd"> some fixed delay. The delay is configurable when constructing the consumer</span>
</span><span id="Consumer.negative_acknowledge-1176"><a href="#Consumer.negative_acknowledge-1176"><span class="linenos">1176</span></a><span class="sd"> with {@link ConsumerConfiguration#setNegativeAckRedeliveryDelayMs}.</span>
</span><span id="Consumer.negative_acknowledge-1177"><a href="#Consumer.negative_acknowledge-1177"><span class="linenos">1177</span></a>
</span><span id="Consumer.negative_acknowledge-1178"><a href="#Consumer.negative_acknowledge-1178"><span class="linenos">1178</span></a><span class="sd"> This call is not blocking.</span>
</span><span id="Consumer.negative_acknowledge-1179"><a href="#Consumer.negative_acknowledge-1179"><span class="linenos">1179</span></a>
</span><span id="Consumer.negative_acknowledge-1180"><a href="#Consumer.negative_acknowledge-1180"><span class="linenos">1180</span></a><span class="sd"> **Args**</span>
</span><span id="Consumer.negative_acknowledge-1181"><a href="#Consumer.negative_acknowledge-1181"><span class="linenos">1181</span></a>
</span><span id="Consumer.negative_acknowledge-1182"><a href="#Consumer.negative_acknowledge-1182"><span class="linenos">1182</span></a><span class="sd"> * `message`:</span>
</span><span id="Consumer.negative_acknowledge-1183"><a href="#Consumer.negative_acknowledge-1183"><span class="linenos">1183</span></a><span class="sd"> The received message or message id.</span>
</span><span id="Consumer.negative_acknowledge-1184"><a href="#Consumer.negative_acknowledge-1184"><span class="linenos">1184</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="Consumer.negative_acknowledge-1185"><a href="#Consumer.negative_acknowledge-1185"><span class="linenos">1185</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">message</span><span class="p">,</span> <span class="n">Message</span><span class="p">):</span>
</span><span id="Consumer.negative_acknowledge-1186"><a href="#Consumer.negative_acknowledge-1186"><span class="linenos">1186</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_consumer</span><span class="o">.</span><span class="n">negative_acknowledge</span><span class="p">(</span><span class="n">message</span><span class="o">.</span><span class="n">_message</span><span class="p">)</span>
</span><span id="Consumer.negative_acknowledge-1187"><a href="#Consumer.negative_acknowledge-1187"><span class="linenos">1187</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="Consumer.negative_acknowledge-1188"><a href="#Consumer.negative_acknowledge-1188"><span class="linenos">1188</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_consumer</span><span class="o">.</span><span class="n">negative_acknowledge</span><span class="p">(</span><span class="n">message</span><span class="p">)</span>
</span></pre></div>
<div class="docstring"><p>Acknowledge the failure to process a single message.</p>
<p>When a message is "negatively acked" it will be marked for redelivery after
some fixed delay. The delay is configurable when constructing the consumer
with {@link ConsumerConfiguration#setNegativeAckRedeliveryDelayMs}.</p>
<p>This call is not blocking.</p>
<p><strong>Args</strong></p>
<ul>
<li><code>message</code>:
The received message or message id.</li>
</ul>
</div>
</div>
<div id="Consumer.pause_message_listener" class="classattr">
<input id="Consumer.pause_message_listener-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<div class="attr function">
<span class="def">def</span>
<span class="name">pause_message_listener</span><span class="signature pdoc-code condensed">(<span class="param"><span class="bp">self</span></span><span class="return-annotation">):</span></span>
<label class="view-source-button" for="Consumer.pause_message_listener-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#Consumer.pause_message_listener"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="Consumer.pause_message_listener-1190"><a href="#Consumer.pause_message_listener-1190"><span class="linenos">1190</span></a> <span class="k">def</span> <span class="nf">pause_message_listener</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
</span><span id="Consumer.pause_message_listener-1191"><a href="#Consumer.pause_message_listener-1191"><span class="linenos">1191</span></a> <span class="sd">&quot;&quot;&quot;</span>
</span><span id="Consumer.pause_message_listener-1192"><a href="#Consumer.pause_message_listener-1192"><span class="linenos">1192</span></a><span class="sd"> Pause receiving messages via the `message_listener` until</span>
</span><span id="Consumer.pause_message_listener-1193"><a href="#Consumer.pause_message_listener-1193"><span class="linenos">1193</span></a><span class="sd"> `resume_message_listener()` is called.</span>
</span><span id="Consumer.pause_message_listener-1194"><a href="#Consumer.pause_message_listener-1194"><span class="linenos">1194</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="Consumer.pause_message_listener-1195"><a href="#Consumer.pause_message_listener-1195"><span class="linenos">1195</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_consumer</span><span class="o">.</span><span class="n">pause_message_listener</span><span class="p">()</span>
</span></pre></div>
<div class="docstring"><p>Pause receiving messages via the <code>message_listener</code> until
<code><a href="#Consumer.resume_message_listener">resume_message_listener()</a></code> is called.</p>
</div>
</div>
<div id="Consumer.resume_message_listener" class="classattr">
<input id="Consumer.resume_message_listener-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<div class="attr function">
<span class="def">def</span>
<span class="name">resume_message_listener</span><span class="signature pdoc-code condensed">(<span class="param"><span class="bp">self</span></span><span class="return-annotation">):</span></span>
<label class="view-source-button" for="Consumer.resume_message_listener-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#Consumer.resume_message_listener"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="Consumer.resume_message_listener-1197"><a href="#Consumer.resume_message_listener-1197"><span class="linenos">1197</span></a> <span class="k">def</span> <span class="nf">resume_message_listener</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
</span><span id="Consumer.resume_message_listener-1198"><a href="#Consumer.resume_message_listener-1198"><span class="linenos">1198</span></a> <span class="sd">&quot;&quot;&quot;</span>
</span><span id="Consumer.resume_message_listener-1199"><a href="#Consumer.resume_message_listener-1199"><span class="linenos">1199</span></a><span class="sd"> Resume receiving the messages via the message listener.</span>
</span><span id="Consumer.resume_message_listener-1200"><a href="#Consumer.resume_message_listener-1200"><span class="linenos">1200</span></a><span class="sd"> Asynchronously receive all the messages enqueued from the time</span>
</span><span id="Consumer.resume_message_listener-1201"><a href="#Consumer.resume_message_listener-1201"><span class="linenos">1201</span></a><span class="sd"> `pause_message_listener()` was called.</span>
</span><span id="Consumer.resume_message_listener-1202"><a href="#Consumer.resume_message_listener-1202"><span class="linenos">1202</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="Consumer.resume_message_listener-1203"><a href="#Consumer.resume_message_listener-1203"><span class="linenos">1203</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_consumer</span><span class="o">.</span><span class="n">resume_message_listener</span><span class="p">()</span>
</span></pre></div>
<div class="docstring"><p>Resume receiving the messages via the message listener.
Asynchronously receive all the messages enqueued from the time
<code><a href="#Consumer.pause_message_listener">pause_message_listener()</a></code> was called.</p>
</div>
</div>
<div id="Consumer.redeliver_unacknowledged_messages" class="classattr">
<input id="Consumer.redeliver_unacknowledged_messages-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<div class="attr function">
<span class="def">def</span>
<span class="name">redeliver_unacknowledged_messages</span><span class="signature pdoc-code condensed">(<span class="param"><span class="bp">self</span></span><span class="return-annotation">):</span></span>
<label class="view-source-button" for="Consumer.redeliver_unacknowledged_messages-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#Consumer.redeliver_unacknowledged_messages"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="Consumer.redeliver_unacknowledged_messages-1205"><a href="#Consumer.redeliver_unacknowledged_messages-1205"><span class="linenos">1205</span></a> <span class="k">def</span> <span class="nf">redeliver_unacknowledged_messages</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
</span><span id="Consumer.redeliver_unacknowledged_messages-1206"><a href="#Consumer.redeliver_unacknowledged_messages-1206"><span class="linenos">1206</span></a> <span class="sd">&quot;&quot;&quot;</span>
</span><span id="Consumer.redeliver_unacknowledged_messages-1207"><a href="#Consumer.redeliver_unacknowledged_messages-1207"><span class="linenos">1207</span></a><span class="sd"> Redelivers all the unacknowledged messages. In failover mode, the</span>
</span><span id="Consumer.redeliver_unacknowledged_messages-1208"><a href="#Consumer.redeliver_unacknowledged_messages-1208"><span class="linenos">1208</span></a><span class="sd"> request is ignored if the consumer is not active for the given topic. In</span>
</span><span id="Consumer.redeliver_unacknowledged_messages-1209"><a href="#Consumer.redeliver_unacknowledged_messages-1209"><span class="linenos">1209</span></a><span class="sd"> shared mode, the consumer&#39;s messages to be redelivered are distributed</span>
</span><span id="Consumer.redeliver_unacknowledged_messages-1210"><a href="#Consumer.redeliver_unacknowledged_messages-1210"><span class="linenos">1210</span></a><span class="sd"> across all the connected consumers. This is a non-blocking call and</span>
</span><span id="Consumer.redeliver_unacknowledged_messages-1211"><a href="#Consumer.redeliver_unacknowledged_messages-1211"><span class="linenos">1211</span></a><span class="sd"> doesn&#39;t throw an exception. In case the connection breaks, the messages</span>
</span><span id="Consumer.redeliver_unacknowledged_messages-1212"><a href="#Consumer.redeliver_unacknowledged_messages-1212"><span class="linenos">1212</span></a><span class="sd"> are redelivered after reconnect.</span>
</span><span id="Consumer.redeliver_unacknowledged_messages-1213"><a href="#Consumer.redeliver_unacknowledged_messages-1213"><span class="linenos">1213</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="Consumer.redeliver_unacknowledged_messages-1214"><a href="#Consumer.redeliver_unacknowledged_messages-1214"><span class="linenos">1214</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_consumer</span><span class="o">.</span><span class="n">redeliver_unacknowledged_messages</span><span class="p">()</span>
</span></pre></div>
<div class="docstring"><p>Redelivers all the unacknowledged messages. In failover mode, the
request is ignored if the consumer is not active for the given topic. In
shared mode, the consumer's messages to be redelivered are distributed
across all the connected consumers. This is a non-blocking call and
doesn't throw an exception. In case the connection breaks, the messages
are redelivered after reconnect.</p>
</div>
</div>
<div id="Consumer.seek" class="classattr">
<input id="Consumer.seek-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<div class="attr function">
<span class="def">def</span>
<span class="name">seek</span><span class="signature pdoc-code condensed">(<span class="param"><span class="bp">self</span>, </span><span class="param"><span class="n">messageid</span></span><span class="return-annotation">):</span></span>
<label class="view-source-button" for="Consumer.seek-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#Consumer.seek"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="Consumer.seek-1216"><a href="#Consumer.seek-1216"><span class="linenos">1216</span></a> <span class="k">def</span> <span class="nf">seek</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">messageid</span><span class="p">):</span>
</span><span id="Consumer.seek-1217"><a href="#Consumer.seek-1217"><span class="linenos">1217</span></a> <span class="sd">&quot;&quot;&quot;</span>
</span><span id="Consumer.seek-1218"><a href="#Consumer.seek-1218"><span class="linenos">1218</span></a><span class="sd"> Reset the subscription associated with this consumer to a specific message id or publish timestamp.</span>
</span><span id="Consumer.seek-1219"><a href="#Consumer.seek-1219"><span class="linenos">1219</span></a><span class="sd"> The message id can either be a specific message or represent the first or last messages in the topic.</span>
</span><span id="Consumer.seek-1220"><a href="#Consumer.seek-1220"><span class="linenos">1220</span></a><span class="sd"> Note: this operation can only be done on non-partitioned topics. For these, one can rather perform the</span>
</span><span id="Consumer.seek-1221"><a href="#Consumer.seek-1221"><span class="linenos">1221</span></a><span class="sd"> seek() on the individual partitions.</span>
</span><span id="Consumer.seek-1222"><a href="#Consumer.seek-1222"><span class="linenos">1222</span></a>
</span><span id="Consumer.seek-1223"><a href="#Consumer.seek-1223"><span class="linenos">1223</span></a><span class="sd"> **Args**</span>
</span><span id="Consumer.seek-1224"><a href="#Consumer.seek-1224"><span class="linenos">1224</span></a>
</span><span id="Consumer.seek-1225"><a href="#Consumer.seek-1225"><span class="linenos">1225</span></a><span class="sd"> * `message`:</span>
</span><span id="Consumer.seek-1226"><a href="#Consumer.seek-1226"><span class="linenos">1226</span></a><span class="sd"> The message id for seek, OR an integer event time to seek to</span>
</span><span id="Consumer.seek-1227"><a href="#Consumer.seek-1227"><span class="linenos">1227</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="Consumer.seek-1228"><a href="#Consumer.seek-1228"><span class="linenos">1228</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_consumer</span><span class="o">.</span><span class="n">seek</span><span class="p">(</span><span class="n">messageid</span><span class="p">)</span>
</span></pre></div>
<div class="docstring"><p>Reset the subscription associated with this consumer to a specific message id or publish timestamp.
The message id can either be a specific message or represent the first or last messages in the topic.
Note: this operation can only be done on non-partitioned topics. For these, one can rather perform the
seek() on the individual partitions.</p>
<p><strong>Args</strong></p>
<ul>
<li><code>message</code>:
The message id for seek, OR an integer event time to seek to</li>
</ul>
</div>
</div>
<div id="Consumer.close" class="classattr">
<input id="Consumer.close-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<div class="attr function">
<span class="def">def</span>
<span class="name">close</span><span class="signature pdoc-code condensed">(<span class="param"><span class="bp">self</span></span><span class="return-annotation">):</span></span>
<label class="view-source-button" for="Consumer.close-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#Consumer.close"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="Consumer.close-1230"><a href="#Consumer.close-1230"><span class="linenos">1230</span></a> <span class="k">def</span> <span class="nf">close</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
</span><span id="Consumer.close-1231"><a href="#Consumer.close-1231"><span class="linenos">1231</span></a> <span class="sd">&quot;&quot;&quot;</span>
</span><span id="Consumer.close-1232"><a href="#Consumer.close-1232"><span class="linenos">1232</span></a><span class="sd"> Close the consumer.</span>
</span><span id="Consumer.close-1233"><a href="#Consumer.close-1233"><span class="linenos">1233</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="Consumer.close-1234"><a href="#Consumer.close-1234"><span class="linenos">1234</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_consumer</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
</span><span id="Consumer.close-1235"><a href="#Consumer.close-1235"><span class="linenos">1235</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_client</span><span class="o">.</span><span class="n">_consumers</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>
</span></pre></div>
<div class="docstring"><p>Close the consumer.</p>
</div>
</div>
</section>
<section id="Reader">
<input id="Reader-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<div class="attr class">
<span class="def">class</span>
<span class="name">Reader</span>:
<label class="view-source-button" for="Reader-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#Reader"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="Reader-1238"><a href="#Reader-1238"><span class="linenos">1238</span></a><span class="k">class</span> <span class="nc">Reader</span><span class="p">:</span>
</span><span id="Reader-1239"><a href="#Reader-1239"><span class="linenos">1239</span></a> <span class="sd">&quot;&quot;&quot;</span>
</span><span id="Reader-1240"><a href="#Reader-1240"><span class="linenos">1240</span></a><span class="sd"> Pulsar topic reader.</span>
</span><span id="Reader-1241"><a href="#Reader-1241"><span class="linenos">1241</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="Reader-1242"><a href="#Reader-1242"><span class="linenos">1242</span></a>
</span><span id="Reader-1243"><a href="#Reader-1243"><span class="linenos">1243</span></a> <span class="k">def</span> <span class="nf">topic</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
</span><span id="Reader-1244"><a href="#Reader-1244"><span class="linenos">1244</span></a> <span class="sd">&quot;&quot;&quot;</span>
</span><span id="Reader-1245"><a href="#Reader-1245"><span class="linenos">1245</span></a><span class="sd"> Return the topic this reader is reading from.</span>
</span><span id="Reader-1246"><a href="#Reader-1246"><span class="linenos">1246</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="Reader-1247"><a href="#Reader-1247"><span class="linenos">1247</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_reader</span><span class="o">.</span><span class="n">topic</span><span class="p">()</span>
</span><span id="Reader-1248"><a href="#Reader-1248"><span class="linenos">1248</span></a>
</span><span id="Reader-1249"><a href="#Reader-1249"><span class="linenos">1249</span></a> <span class="k">def</span> <span class="nf">read_next</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">timeout_millis</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
</span><span id="Reader-1250"><a href="#Reader-1250"><span class="linenos">1250</span></a> <span class="sd">&quot;&quot;&quot;</span>
</span><span id="Reader-1251"><a href="#Reader-1251"><span class="linenos">1251</span></a><span class="sd"> Read a single message.</span>
</span><span id="Reader-1252"><a href="#Reader-1252"><span class="linenos">1252</span></a>
</span><span id="Reader-1253"><a href="#Reader-1253"><span class="linenos">1253</span></a><span class="sd"> If a message is not immediately available, this method will block until</span>
</span><span id="Reader-1254"><a href="#Reader-1254"><span class="linenos">1254</span></a><span class="sd"> a new message is available.</span>
</span><span id="Reader-1255"><a href="#Reader-1255"><span class="linenos">1255</span></a>
</span><span id="Reader-1256"><a href="#Reader-1256"><span class="linenos">1256</span></a><span class="sd"> **Options**</span>
</span><span id="Reader-1257"><a href="#Reader-1257"><span class="linenos">1257</span></a>
</span><span id="Reader-1258"><a href="#Reader-1258"><span class="linenos">1258</span></a><span class="sd"> * `timeout_millis`:</span>
</span><span id="Reader-1259"><a href="#Reader-1259"><span class="linenos">1259</span></a><span class="sd"> If specified, the receive will raise an exception if a message is not</span>
</span><span id="Reader-1260"><a href="#Reader-1260"><span class="linenos">1260</span></a><span class="sd"> available within the timeout.</span>
</span><span id="Reader-1261"><a href="#Reader-1261"><span class="linenos">1261</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="Reader-1262"><a href="#Reader-1262"><span class="linenos">1262</span></a> <span class="k">if</span> <span class="n">timeout_millis</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
</span><span id="Reader-1263"><a href="#Reader-1263"><span class="linenos">1263</span></a> <span class="n">msg</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_reader</span><span class="o">.</span><span class="n">read_next</span><span class="p">()</span>
</span><span id="Reader-1264"><a href="#Reader-1264"><span class="linenos">1264</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="Reader-1265"><a href="#Reader-1265"><span class="linenos">1265</span></a> <span class="n">_check_type</span><span class="p">(</span><span class="nb">int</span><span class="p">,</span> <span class="n">timeout_millis</span><span class="p">,</span> <span class="s1">&#39;timeout_millis&#39;</span><span class="p">)</span>
</span><span id="Reader-1266"><a href="#Reader-1266"><span class="linenos">1266</span></a> <span class="n">msg</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_reader</span><span class="o">.</span><span class="n">read_next</span><span class="p">(</span><span class="n">timeout_millis</span><span class="p">)</span>
</span><span id="Reader-1267"><a href="#Reader-1267"><span class="linenos">1267</span></a>
</span><span id="Reader-1268"><a href="#Reader-1268"><span class="linenos">1268</span></a> <span class="n">m</span> <span class="o">=</span> <span class="n">Message</span><span class="p">()</span>
</span><span id="Reader-1269"><a href="#Reader-1269"><span class="linenos">1269</span></a> <span class="n">m</span><span class="o">.</span><span class="n">_message</span> <span class="o">=</span> <span class="n">msg</span>
</span><span id="Reader-1270"><a href="#Reader-1270"><span class="linenos">1270</span></a> <span class="n">m</span><span class="o">.</span><span class="n">_schema</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_schema</span>
</span><span id="Reader-1271"><a href="#Reader-1271"><span class="linenos">1271</span></a> <span class="k">return</span> <span class="n">m</span>
</span><span id="Reader-1272"><a href="#Reader-1272"><span class="linenos">1272</span></a>
</span><span id="Reader-1273"><a href="#Reader-1273"><span class="linenos">1273</span></a> <span class="k">def</span> <span class="nf">has_message_available</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
</span><span id="Reader-1274"><a href="#Reader-1274"><span class="linenos">1274</span></a> <span class="sd">&quot;&quot;&quot;</span>
</span><span id="Reader-1275"><a href="#Reader-1275"><span class="linenos">1275</span></a><span class="sd"> Check if there is any message available to read from the current position.</span>
</span><span id="Reader-1276"><a href="#Reader-1276"><span class="linenos">1276</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="Reader-1277"><a href="#Reader-1277"><span class="linenos">1277</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_reader</span><span class="o">.</span><span class="n">has_message_available</span><span class="p">();</span>
</span><span id="Reader-1278"><a href="#Reader-1278"><span class="linenos">1278</span></a>
</span><span id="Reader-1279"><a href="#Reader-1279"><span class="linenos">1279</span></a> <span class="k">def</span> <span class="nf">seek</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">messageid</span><span class="p">):</span>
</span><span id="Reader-1280"><a href="#Reader-1280"><span class="linenos">1280</span></a> <span class="sd">&quot;&quot;&quot;</span>
</span><span id="Reader-1281"><a href="#Reader-1281"><span class="linenos">1281</span></a><span class="sd"> Reset this reader to a specific message id or publish timestamp.</span>
</span><span id="Reader-1282"><a href="#Reader-1282"><span class="linenos">1282</span></a><span class="sd"> The message id can either be a specific message or represent the first or last messages in the topic.</span>
</span><span id="Reader-1283"><a href="#Reader-1283"><span class="linenos">1283</span></a><span class="sd"> Note: this operation can only be done on non-partitioned topics. For these, one can rather perform the</span>
</span><span id="Reader-1284"><a href="#Reader-1284"><span class="linenos">1284</span></a><span class="sd"> seek() on the individual partitions.</span>
</span><span id="Reader-1285"><a href="#Reader-1285"><span class="linenos">1285</span></a>
</span><span id="Reader-1286"><a href="#Reader-1286"><span class="linenos">1286</span></a><span class="sd"> **Args**</span>
</span><span id="Reader-1287"><a href="#Reader-1287"><span class="linenos">1287</span></a>
</span><span id="Reader-1288"><a href="#Reader-1288"><span class="linenos">1288</span></a><span class="sd"> * `message`:</span>
</span><span id="Reader-1289"><a href="#Reader-1289"><span class="linenos">1289</span></a><span class="sd"> The message id for seek, OR an integer event time to seek to</span>
</span><span id="Reader-1290"><a href="#Reader-1290"><span class="linenos">1290</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="Reader-1291"><a href="#Reader-1291"><span class="linenos">1291</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_reader</span><span class="o">.</span><span class="n">seek</span><span class="p">(</span><span class="n">messageid</span><span class="p">)</span>
</span><span id="Reader-1292"><a href="#Reader-1292"><span class="linenos">1292</span></a>
</span><span id="Reader-1293"><a href="#Reader-1293"><span class="linenos">1293</span></a> <span class="k">def</span> <span class="nf">close</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
</span><span id="Reader-1294"><a href="#Reader-1294"><span class="linenos">1294</span></a> <span class="sd">&quot;&quot;&quot;</span>
</span><span id="Reader-1295"><a href="#Reader-1295"><span class="linenos">1295</span></a><span class="sd"> Close the reader.</span>
</span><span id="Reader-1296"><a href="#Reader-1296"><span class="linenos">1296</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="Reader-1297"><a href="#Reader-1297"><span class="linenos">1297</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_reader</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
</span><span id="Reader-1298"><a href="#Reader-1298"><span class="linenos">1298</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_client</span><span class="o">.</span><span class="n">_consumers</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>
</span></pre></div>
<div class="docstring"><p>Pulsar topic reader.</p>
</div>
<div id="Reader.__init__" class="classattr">
<div class="attr function">
<span class="name">Reader</span><span class="signature pdoc-code condensed">()</span>
</div>
<a class="headerlink" href="#Reader.__init__"></a>
</div>
<div id="Reader.topic" class="classattr">
<input id="Reader.topic-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<div class="attr function">
<span class="def">def</span>
<span class="name">topic</span><span class="signature pdoc-code condensed">(<span class="param"><span class="bp">self</span></span><span class="return-annotation">):</span></span>
<label class="view-source-button" for="Reader.topic-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#Reader.topic"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="Reader.topic-1243"><a href="#Reader.topic-1243"><span class="linenos">1243</span></a> <span class="k">def</span> <span class="nf">topic</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
</span><span id="Reader.topic-1244"><a href="#Reader.topic-1244"><span class="linenos">1244</span></a> <span class="sd">&quot;&quot;&quot;</span>
</span><span id="Reader.topic-1245"><a href="#Reader.topic-1245"><span class="linenos">1245</span></a><span class="sd"> Return the topic this reader is reading from.</span>
</span><span id="Reader.topic-1246"><a href="#Reader.topic-1246"><span class="linenos">1246</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="Reader.topic-1247"><a href="#Reader.topic-1247"><span class="linenos">1247</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_reader</span><span class="o">.</span><span class="n">topic</span><span class="p">()</span>
</span></pre></div>
<div class="docstring"><p>Return the topic this reader is reading from.</p>
</div>
</div>
<div id="Reader.read_next" class="classattr">
<input id="Reader.read_next-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<div class="attr function">
<span class="def">def</span>
<span class="name">read_next</span><span class="signature pdoc-code condensed">(<span class="param"><span class="bp">self</span>, </span><span class="param"><span class="n">timeout_millis</span><span class="o">=</span><span class="kc">None</span></span><span class="return-annotation">):</span></span>
<label class="view-source-button" for="Reader.read_next-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#Reader.read_next"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="Reader.read_next-1249"><a href="#Reader.read_next-1249"><span class="linenos">1249</span></a> <span class="k">def</span> <span class="nf">read_next</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">timeout_millis</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
</span><span id="Reader.read_next-1250"><a href="#Reader.read_next-1250"><span class="linenos">1250</span></a> <span class="sd">&quot;&quot;&quot;</span>
</span><span id="Reader.read_next-1251"><a href="#Reader.read_next-1251"><span class="linenos">1251</span></a><span class="sd"> Read a single message.</span>
</span><span id="Reader.read_next-1252"><a href="#Reader.read_next-1252"><span class="linenos">1252</span></a>
</span><span id="Reader.read_next-1253"><a href="#Reader.read_next-1253"><span class="linenos">1253</span></a><span class="sd"> If a message is not immediately available, this method will block until</span>
</span><span id="Reader.read_next-1254"><a href="#Reader.read_next-1254"><span class="linenos">1254</span></a><span class="sd"> a new message is available.</span>
</span><span id="Reader.read_next-1255"><a href="#Reader.read_next-1255"><span class="linenos">1255</span></a>
</span><span id="Reader.read_next-1256"><a href="#Reader.read_next-1256"><span class="linenos">1256</span></a><span class="sd"> **Options**</span>
</span><span id="Reader.read_next-1257"><a href="#Reader.read_next-1257"><span class="linenos">1257</span></a>
</span><span id="Reader.read_next-1258"><a href="#Reader.read_next-1258"><span class="linenos">1258</span></a><span class="sd"> * `timeout_millis`:</span>
</span><span id="Reader.read_next-1259"><a href="#Reader.read_next-1259"><span class="linenos">1259</span></a><span class="sd"> If specified, the receive will raise an exception if a message is not</span>
</span><span id="Reader.read_next-1260"><a href="#Reader.read_next-1260"><span class="linenos">1260</span></a><span class="sd"> available within the timeout.</span>
</span><span id="Reader.read_next-1261"><a href="#Reader.read_next-1261"><span class="linenos">1261</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="Reader.read_next-1262"><a href="#Reader.read_next-1262"><span class="linenos">1262</span></a> <span class="k">if</span> <span class="n">timeout_millis</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
</span><span id="Reader.read_next-1263"><a href="#Reader.read_next-1263"><span class="linenos">1263</span></a> <span class="n">msg</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_reader</span><span class="o">.</span><span class="n">read_next</span><span class="p">()</span>
</span><span id="Reader.read_next-1264"><a href="#Reader.read_next-1264"><span class="linenos">1264</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="Reader.read_next-1265"><a href="#Reader.read_next-1265"><span class="linenos">1265</span></a> <span class="n">_check_type</span><span class="p">(</span><span class="nb">int</span><span class="p">,</span> <span class="n">timeout_millis</span><span class="p">,</span> <span class="s1">&#39;timeout_millis&#39;</span><span class="p">)</span>
</span><span id="Reader.read_next-1266"><a href="#Reader.read_next-1266"><span class="linenos">1266</span></a> <span class="n">msg</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_reader</span><span class="o">.</span><span class="n">read_next</span><span class="p">(</span><span class="n">timeout_millis</span><span class="p">)</span>
</span><span id="Reader.read_next-1267"><a href="#Reader.read_next-1267"><span class="linenos">1267</span></a>
</span><span id="Reader.read_next-1268"><a href="#Reader.read_next-1268"><span class="linenos">1268</span></a> <span class="n">m</span> <span class="o">=</span> <span class="n">Message</span><span class="p">()</span>
</span><span id="Reader.read_next-1269"><a href="#Reader.read_next-1269"><span class="linenos">1269</span></a> <span class="n">m</span><span class="o">.</span><span class="n">_message</span> <span class="o">=</span> <span class="n">msg</span>
</span><span id="Reader.read_next-1270"><a href="#Reader.read_next-1270"><span class="linenos">1270</span></a> <span class="n">m</span><span class="o">.</span><span class="n">_schema</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_schema</span>
</span><span id="Reader.read_next-1271"><a href="#Reader.read_next-1271"><span class="linenos">1271</span></a> <span class="k">return</span> <span class="n">m</span>
</span></pre></div>
<div class="docstring"><p>Read a single message.</p>
<p>If a message is not immediately available, this method will block until
a new message is available.</p>
<p><strong>Options</strong></p>
<ul>
<li><code>timeout_millis</code>:
If specified, the receive will raise an exception if a message is not
available within the timeout.</li>
</ul>
</div>
</div>
<div id="Reader.has_message_available" class="classattr">
<input id="Reader.has_message_available-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<div class="attr function">
<span class="def">def</span>
<span class="name">has_message_available</span><span class="signature pdoc-code condensed">(<span class="param"><span class="bp">self</span></span><span class="return-annotation">):</span></span>
<label class="view-source-button" for="Reader.has_message_available-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#Reader.has_message_available"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="Reader.has_message_available-1273"><a href="#Reader.has_message_available-1273"><span class="linenos">1273</span></a> <span class="k">def</span> <span class="nf">has_message_available</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
</span><span id="Reader.has_message_available-1274"><a href="#Reader.has_message_available-1274"><span class="linenos">1274</span></a> <span class="sd">&quot;&quot;&quot;</span>
</span><span id="Reader.has_message_available-1275"><a href="#Reader.has_message_available-1275"><span class="linenos">1275</span></a><span class="sd"> Check if there is any message available to read from the current position.</span>
</span><span id="Reader.has_message_available-1276"><a href="#Reader.has_message_available-1276"><span class="linenos">1276</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="Reader.has_message_available-1277"><a href="#Reader.has_message_available-1277"><span class="linenos">1277</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_reader</span><span class="o">.</span><span class="n">has_message_available</span><span class="p">();</span>
</span></pre></div>
<div class="docstring"><p>Check if there is any message available to read from the current position.</p>
</div>
</div>
<div id="Reader.seek" class="classattr">
<input id="Reader.seek-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<div class="attr function">
<span class="def">def</span>
<span class="name">seek</span><span class="signature pdoc-code condensed">(<span class="param"><span class="bp">self</span>, </span><span class="param"><span class="n">messageid</span></span><span class="return-annotation">):</span></span>
<label class="view-source-button" for="Reader.seek-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#Reader.seek"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="Reader.seek-1279"><a href="#Reader.seek-1279"><span class="linenos">1279</span></a> <span class="k">def</span> <span class="nf">seek</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">messageid</span><span class="p">):</span>
</span><span id="Reader.seek-1280"><a href="#Reader.seek-1280"><span class="linenos">1280</span></a> <span class="sd">&quot;&quot;&quot;</span>
</span><span id="Reader.seek-1281"><a href="#Reader.seek-1281"><span class="linenos">1281</span></a><span class="sd"> Reset this reader to a specific message id or publish timestamp.</span>
</span><span id="Reader.seek-1282"><a href="#Reader.seek-1282"><span class="linenos">1282</span></a><span class="sd"> The message id can either be a specific message or represent the first or last messages in the topic.</span>
</span><span id="Reader.seek-1283"><a href="#Reader.seek-1283"><span class="linenos">1283</span></a><span class="sd"> Note: this operation can only be done on non-partitioned topics. For these, one can rather perform the</span>
</span><span id="Reader.seek-1284"><a href="#Reader.seek-1284"><span class="linenos">1284</span></a><span class="sd"> seek() on the individual partitions.</span>
</span><span id="Reader.seek-1285"><a href="#Reader.seek-1285"><span class="linenos">1285</span></a>
</span><span id="Reader.seek-1286"><a href="#Reader.seek-1286"><span class="linenos">1286</span></a><span class="sd"> **Args**</span>
</span><span id="Reader.seek-1287"><a href="#Reader.seek-1287"><span class="linenos">1287</span></a>
</span><span id="Reader.seek-1288"><a href="#Reader.seek-1288"><span class="linenos">1288</span></a><span class="sd"> * `message`:</span>
</span><span id="Reader.seek-1289"><a href="#Reader.seek-1289"><span class="linenos">1289</span></a><span class="sd"> The message id for seek, OR an integer event time to seek to</span>
</span><span id="Reader.seek-1290"><a href="#Reader.seek-1290"><span class="linenos">1290</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="Reader.seek-1291"><a href="#Reader.seek-1291"><span class="linenos">1291</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_reader</span><span class="o">.</span><span class="n">seek</span><span class="p">(</span><span class="n">messageid</span><span class="p">)</span>
</span></pre></div>
<div class="docstring"><p>Reset this reader to a specific message id or publish timestamp.
The message id can either be a specific message or represent the first or last messages in the topic.
Note: this operation can only be done on non-partitioned topics. For these, one can rather perform the
seek() on the individual partitions.</p>
<p><strong>Args</strong></p>
<ul>
<li><code>message</code>:
The message id for seek, OR an integer event time to seek to</li>
</ul>
</div>
</div>
<div id="Reader.close" class="classattr">
<input id="Reader.close-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<div class="attr function">
<span class="def">def</span>
<span class="name">close</span><span class="signature pdoc-code condensed">(<span class="param"><span class="bp">self</span></span><span class="return-annotation">):</span></span>
<label class="view-source-button" for="Reader.close-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#Reader.close"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="Reader.close-1293"><a href="#Reader.close-1293"><span class="linenos">1293</span></a> <span class="k">def</span> <span class="nf">close</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
</span><span id="Reader.close-1294"><a href="#Reader.close-1294"><span class="linenos">1294</span></a> <span class="sd">&quot;&quot;&quot;</span>
</span><span id="Reader.close-1295"><a href="#Reader.close-1295"><span class="linenos">1295</span></a><span class="sd"> Close the reader.</span>
</span><span id="Reader.close-1296"><a href="#Reader.close-1296"><span class="linenos">1296</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="Reader.close-1297"><a href="#Reader.close-1297"><span class="linenos">1297</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_reader</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
</span><span id="Reader.close-1298"><a href="#Reader.close-1298"><span class="linenos">1298</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_client</span><span class="o">.</span><span class="n">_consumers</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>
</span></pre></div>
<div class="docstring"><p>Close the reader.</p>
</div>
</div>
</section>
<section id="CryptoKeyReader">
<input id="CryptoKeyReader-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<div class="attr class">
<span class="def">class</span>
<span class="name">CryptoKeyReader</span>:
<label class="view-source-button" for="CryptoKeyReader-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#CryptoKeyReader"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="CryptoKeyReader-1300"><a href="#CryptoKeyReader-1300"><span class="linenos">1300</span></a><span class="k">class</span> <span class="nc">CryptoKeyReader</span><span class="p">:</span>
</span><span id="CryptoKeyReader-1301"><a href="#CryptoKeyReader-1301"><span class="linenos">1301</span></a> <span class="sd">&quot;&quot;&quot;</span>
</span><span id="CryptoKeyReader-1302"><a href="#CryptoKeyReader-1302"><span class="linenos">1302</span></a><span class="sd"> Default crypto key reader implementation</span>
</span><span id="CryptoKeyReader-1303"><a href="#CryptoKeyReader-1303"><span class="linenos">1303</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="CryptoKeyReader-1304"><a href="#CryptoKeyReader-1304"><span class="linenos">1304</span></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">public_key_path</span><span class="p">,</span> <span class="n">private_key_path</span><span class="p">):</span>
</span><span id="CryptoKeyReader-1305"><a href="#CryptoKeyReader-1305"><span class="linenos">1305</span></a> <span class="sd">&quot;&quot;&quot;</span>
</span><span id="CryptoKeyReader-1306"><a href="#CryptoKeyReader-1306"><span class="linenos">1306</span></a><span class="sd"> Create crypto key reader.</span>
</span><span id="CryptoKeyReader-1307"><a href="#CryptoKeyReader-1307"><span class="linenos">1307</span></a>
</span><span id="CryptoKeyReader-1308"><a href="#CryptoKeyReader-1308"><span class="linenos">1308</span></a><span class="sd"> **Args**</span>
</span><span id="CryptoKeyReader-1309"><a href="#CryptoKeyReader-1309"><span class="linenos">1309</span></a>
</span><span id="CryptoKeyReader-1310"><a href="#CryptoKeyReader-1310"><span class="linenos">1310</span></a><span class="sd"> * `public_key_path`: Path to the public key</span>
</span><span id="CryptoKeyReader-1311"><a href="#CryptoKeyReader-1311"><span class="linenos">1311</span></a><span class="sd"> * `private_key_path`: Path to private key</span>
</span><span id="CryptoKeyReader-1312"><a href="#CryptoKeyReader-1312"><span class="linenos">1312</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="CryptoKeyReader-1313"><a href="#CryptoKeyReader-1313"><span class="linenos">1313</span></a> <span class="n">_check_type</span><span class="p">(</span><span class="nb">str</span><span class="p">,</span> <span class="n">public_key_path</span><span class="p">,</span> <span class="s1">&#39;public_key_path&#39;</span><span class="p">)</span>
</span><span id="CryptoKeyReader-1314"><a href="#CryptoKeyReader-1314"><span class="linenos">1314</span></a> <span class="n">_check_type</span><span class="p">(</span><span class="nb">str</span><span class="p">,</span> <span class="n">private_key_path</span><span class="p">,</span> <span class="s1">&#39;private_key_path&#39;</span><span class="p">)</span>
</span><span id="CryptoKeyReader-1315"><a href="#CryptoKeyReader-1315"><span class="linenos">1315</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">cryptoKeyReader</span> <span class="o">=</span> <span class="n">_pulsar</span><span class="o">.</span><span class="n">CryptoKeyReader</span><span class="p">(</span><span class="n">public_key_path</span><span class="p">,</span> <span class="n">private_key_path</span><span class="p">)</span>
</span></pre></div>
<div class="docstring"><p>Default crypto key reader implementation</p>
</div>
<div id="CryptoKeyReader.__init__" class="classattr">
<input id="CryptoKeyReader.__init__-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<div class="attr function">
<span class="name">CryptoKeyReader</span><span class="signature pdoc-code condensed">(<span class="param"><span class="n">public_key_path</span>, </span><span class="param"><span class="n">private_key_path</span></span>)</span>
<label class="view-source-button" for="CryptoKeyReader.__init__-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#CryptoKeyReader.__init__"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="CryptoKeyReader.__init__-1304"><a href="#CryptoKeyReader.__init__-1304"><span class="linenos">1304</span></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">public_key_path</span><span class="p">,</span> <span class="n">private_key_path</span><span class="p">):</span>
</span><span id="CryptoKeyReader.__init__-1305"><a href="#CryptoKeyReader.__init__-1305"><span class="linenos">1305</span></a> <span class="sd">&quot;&quot;&quot;</span>
</span><span id="CryptoKeyReader.__init__-1306"><a href="#CryptoKeyReader.__init__-1306"><span class="linenos">1306</span></a><span class="sd"> Create crypto key reader.</span>
</span><span id="CryptoKeyReader.__init__-1307"><a href="#CryptoKeyReader.__init__-1307"><span class="linenos">1307</span></a>
</span><span id="CryptoKeyReader.__init__-1308"><a href="#CryptoKeyReader.__init__-1308"><span class="linenos">1308</span></a><span class="sd"> **Args**</span>
</span><span id="CryptoKeyReader.__init__-1309"><a href="#CryptoKeyReader.__init__-1309"><span class="linenos">1309</span></a>
</span><span id="CryptoKeyReader.__init__-1310"><a href="#CryptoKeyReader.__init__-1310"><span class="linenos">1310</span></a><span class="sd"> * `public_key_path`: Path to the public key</span>
</span><span id="CryptoKeyReader.__init__-1311"><a href="#CryptoKeyReader.__init__-1311"><span class="linenos">1311</span></a><span class="sd"> * `private_key_path`: Path to private key</span>
</span><span id="CryptoKeyReader.__init__-1312"><a href="#CryptoKeyReader.__init__-1312"><span class="linenos">1312</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="CryptoKeyReader.__init__-1313"><a href="#CryptoKeyReader.__init__-1313"><span class="linenos">1313</span></a> <span class="n">_check_type</span><span class="p">(</span><span class="nb">str</span><span class="p">,</span> <span class="n">public_key_path</span><span class="p">,</span> <span class="s1">&#39;public_key_path&#39;</span><span class="p">)</span>
</span><span id="CryptoKeyReader.__init__-1314"><a href="#CryptoKeyReader.__init__-1314"><span class="linenos">1314</span></a> <span class="n">_check_type</span><span class="p">(</span><span class="nb">str</span><span class="p">,</span> <span class="n">private_key_path</span><span class="p">,</span> <span class="s1">&#39;private_key_path&#39;</span><span class="p">)</span>
</span><span id="CryptoKeyReader.__init__-1315"><a href="#CryptoKeyReader.__init__-1315"><span class="linenos">1315</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">cryptoKeyReader</span> <span class="o">=</span> <span class="n">_pulsar</span><span class="o">.</span><span class="n">CryptoKeyReader</span><span class="p">(</span><span class="n">public_key_path</span><span class="p">,</span> <span class="n">private_key_path</span><span class="p">)</span>
</span></pre></div>
<div class="docstring"><p>Create crypto key reader.</p>
<p><strong>Args</strong></p>
<ul>
<li><code>public_key_path</code>: Path to the public key</li>
<li><code>private_key_path</code>: Path to private key</li>
</ul>
</div>
</div>
</section>
</main>
<script>
function escapeHTML(html) {
return document.createElement('div').appendChild(document.createTextNode(html)).parentNode.innerHTML;
}
const originalContent = document.querySelector("main.pdoc");
let currentContent = originalContent;
function setContent(innerHTML) {
let elem;
if (innerHTML) {
elem = document.createElement("main");
elem.classList.add("pdoc");
elem.innerHTML = innerHTML;
} else {
elem = originalContent;
}
if (currentContent !== elem) {
currentContent.replaceWith(elem);
currentContent = elem;
}
}
function getSearchTerm() {
return (new URL(window.location)).searchParams.get("search");
}
const searchBox = document.querySelector(".pdoc input[type=search]");
searchBox.addEventListener("input", function () {
let url = new URL(window.location);
if (searchBox.value.trim()) {
url.hash = "";
url.searchParams.set("search", searchBox.value);
} else {
url.searchParams.delete("search");
}
history.replaceState("", "", url.toString());
onInput();
});
window.addEventListener("popstate", onInput);
let search, searchErr;
async function initialize() {
try {
search = await new Promise((resolve, reject) => {
const script = document.createElement("script");
script.type = "text/javascript";
script.async = true;
script.onload = () => resolve(window.pdocSearch);
script.onerror = (e) => reject(e);
script.src = "search.js";
document.getElementsByTagName("head")[0].appendChild(script);
});
} catch (e) {
console.error("Cannot fetch pdoc search index");
searchErr = "Cannot fetch search index.";
}
onInput();
document.querySelector("nav.pdoc").addEventListener("click", e => {
if (e.target.hash) {
searchBox.value = "";
searchBox.dispatchEvent(new Event("input"));
}
});
}
function onInput() {
setContent((() => {
const term = getSearchTerm();
if (!term) {
return null
}
if (searchErr) {
return `<h3>Error: ${searchErr}</h3>`
}
if (!search) {
return "<h3>Searching...</h3>"
}
window.scrollTo({top: 0, left: 0, behavior: 'auto'});
const results = search(term);
let html;
if (results.length === 0) {
html = `No search results for '${escapeHTML(term)}'.`
} else {
html = `<h4>${results.length} search result${results.length > 1 ? "s" : ""} for '${escapeHTML(term)}'.</h4>`;
}
for (let result of results.slice(0, 10)) {
let doc = result.doc;
let url = `${doc.modulename.replaceAll(".", "/")}.html`;
if (doc.qualname) {
url += `#${doc.qualname}`;
}
let heading;
switch (result.doc.kind) {
case "function":
if (doc.fullname.endsWith(".__init__")) {
heading = `<span class="name">${doc.fullname.replace(/\.__init__$/, "")}</span>${doc.signature}`;
} else {
heading = `<span class="def">${doc.funcdef}</span> <span class="name">${doc.fullname}</span>${doc.signature}`;
}
break;
case "class":
heading = `<span class="def">class</span> <span class="name">${doc.fullname}</span>`;
if (doc.bases)
heading += `<wbr>(<span class="base">${doc.bases}</span>)`;
heading += `:`;
break;
case "variable":
heading = `<span class="name">${doc.fullname}</span>`;
if (doc.annotation)
heading += `<span class="annotation">${doc.annotation}</span>`;
if (doc.default_value)
heading += `<span class="default_value">${doc.default_value}</span>`;
break;
default:
heading = `<span class="name">${doc.fullname}</span>`;
break;
}
html += `
<section class="search-result">
<a href="${url}" class="attr ${doc.kind}">${heading}</a>
<div class="docstring">${doc.doc}</div>
</section>
`;
}
return html;
})());
}
if (getSearchTerm()) {
initialize();
searchBox.value = getSearchTerm();
onInput();
} else {
searchBox.addEventListener("focus", initialize, {once: true});
}
searchBox.addEventListener("keydown", e => {
if (["ArrowDown", "ArrowUp", "Enter"].includes(e.key)) {
let focused = currentContent.querySelector(".search-result.focused");
if (!focused) {
currentContent.querySelector(".search-result").classList.add("focused");
} else if (
e.key === "ArrowDown"
&& focused.nextElementSibling
&& focused.nextElementSibling.classList.contains("search-result")
) {
focused.classList.remove("focused");
focused.nextElementSibling.classList.add("focused");
focused.nextElementSibling.scrollIntoView({
behavior: "smooth",
block: "nearest",
inline: "nearest"
});
} else if (
e.key === "ArrowUp"
&& focused.previousElementSibling
&& focused.previousElementSibling.classList.contains("search-result")
) {
focused.classList.remove("focused");
focused.previousElementSibling.classList.add("focused");
focused.previousElementSibling.scrollIntoView({
behavior: "smooth",
block: "nearest",
inline: "nearest"
});
} else if (
e.key === "Enter"
) {
focused.querySelector("a").click();
}
}
});
</script></body>
</html>