In this episode, you will understand what the Secrets Management building block is, what are some of its concrete component implementations and how you can use it in your own applications.
📺 CSharp TV - Dev Streaming Destination http://csharp.tv
🌎 C# Corner - Community of Software and Data Developers https://www.c-sharpcorner.com
#CSharpTV #csharpcorner #Dapr #LiveShow
Show More Show Less View Video Transcript
0:00
[Music]
0:10
[Music]
0:17
[Music]
0:32
Hello friends this is your host Rodrigo
0:36
Hello friends this is your host Rodrigo
0:36
Hello friends this is your host Rodrigo and this is another session for the
0:39
and this is another session for the
0:39
and this is another session for the Dapper in action series last time I was
0:42
Dapper in action series last time I was
0:42
Dapper in action series last time I was choking in front of the
0:44
choking in front of the
0:44
choking in front of the camera and if you watch the recording I
0:47
camera and if you watch the recording I
0:47
camera and if you watch the recording I was struggling with my health and today
0:51
was struggling with my health and today
0:51
was struggling with my health and today I'm feeling better and this is the
0:53
I'm feeling better and this is the
0:53
I'm feeling better and this is the learning checkpoint part two where we're
0:56
learning checkpoint part two where we're
0:56
learning checkpoint part two where we're going to see some building blocks that
1:00
going to see some building blocks that
1:00
going to see some building blocks that we've seen in the past but I want to
1:03
we've seen in the past but I want to
1:03
we've seen in the past but I want to show you in a single application how I'm
1:06
show you in a single application how I'm
1:06
show you in a single application how I'm using the bindings building block
1:10
using the bindings building block
1:10
using the bindings building block service to service communication State
1:13
service to service communication State
1:13
service to service communication State Management and I think that's it I think
1:17
Management and I think that's it I think
1:17
Management and I think that's it I think that's it we have a lot of things to say
1:19
that's it we have a lot of things to say
1:19
that's it we have a lot of things to say today and let's Jump Right In so you
1:24
today and let's Jump Right In so you
1:24
today and let's Jump Right In so you might remember last time we talk about
1:26
might remember last time we talk about
1:26
might remember last time we talk about the pops up building block that allows
1:29
the pops up building block that allows
1:29
the pops up building block that allows you to send asynchronous messages
1:32
you to send asynchronous messages
1:32
you to send asynchronous messages between components or applications or
1:36
between components or applications or
1:36
between components or applications or microservices so this is pretty cool
1:39
microservices so this is pretty cool
1:39
microservices so this is pretty cool since you
1:41
since you
1:41
since you can develop and build your applications
1:44
can develop and build your applications
1:44
can develop and build your applications by using an abstraction instead instead
1:47
by using an abstraction instead instead
1:47
by using an abstraction instead instead of using you know a particular in
1:50
of using you know a particular in
1:50
of using you know a particular in concrete SDK for a message broker such
1:54
concrete SDK for a message broker such
1:54
concrete SDK for a message broker such as redis or rabbit mq or Asher service
1:58
as redis or rabbit mq or Asher service
1:58
as redis or rabbit mq or Asher service boss or
2:00
boss or
2:00
boss or whatnot okay so this is pretty cool
2:02
whatnot okay so this is pretty cool
2:02
whatnot okay so this is pretty cool because this is an abstraction that
2:04
because this is an abstraction that
2:04
because this is an abstraction that allows you to send some asynchronous
2:06
allows you to send some asynchronous
2:06
allows you to send some asynchronous messages between
2:07
messages between
2:07
messages between applications and let me show you this
2:11
applications and let me show you this
2:11
applications and let me show you this solution that we have here named
2:15
solution that we have here named
2:15
solution that we have here named hospital and we have two projects this
2:17
hospital and we have two projects this
2:18
hospital and we have two projects this is uh I'm using net 9 because this is
2:21
is uh I'm using net 9 because this is
2:21
is uh I'm using net 9 because this is the latest version of net at the time of
2:24
the latest version of net at the time of
2:24
the latest version of net at the time of this
2:25
this
2:25
this recording so let's check this out okay
2:29
recording so let's check this out okay
2:29
recording so let's check this out okay so so I have this patience controller
2:32
so so I have this patience controller
2:32
so so I have this patience controller that you can see here on the
2:34
that you can see here on the
2:34
that you can see here on the screen and you can see that I have this
2:37
screen and you can see that I have this
2:37
screen and you can see that I have this HTTP post
2:39
HTTP post
2:39
HTTP post endpoint that I can use for creating new
2:42
endpoint that I can use for creating new
2:43
endpoint that I can use for creating new patients let's say that this is an
2:45
patients let's say that this is an
2:45
patients let's say that this is an application or microservice for creating
2:47
application or microservice for creating
2:48
application or microservice for creating or registering patients in this
2:50
or registering patients in this
2:50
or registering patients in this particular hospital this is a fictitious
2:52
particular hospital this is a fictitious
2:52
particular hospital this is a fictitious company
2:53
company
2:53
company right so as you can see the payload is a
2:56
right so as you can see the payload is a
2:56
right so as you can see the payload is a new patient object which is this record
2:59
new patient object which is this record
2:59
new patient object which is this record that we have here on line
3:02
that we have here on line
3:02
that we have here on line 44 and this is taking first name and
3:05
44 and this is taking first name and
3:05
44 and this is taking first name and last name and that's it I want to you
3:07
last name and that's it I want to you
3:07
last name and that's it I want to you know
3:09
know
3:09
know um uh uh you know use uh think step by
3:14
um uh uh you know use uh think step by
3:14
um uh uh you know use uh think step by step I don't want to use uh quite
3:17
step I don't want to use uh quite
3:17
step I don't want to use uh quite complicated models right now so first
3:20
complicated models right now so first
3:20
complicated models right now so first first name last name and I'm receiving
3:23
first name last name and I'm receiving
3:23
first name last name and I'm receiving the payload and here in this particular
3:26
the payload and here in this particular
3:26
the payload and here in this particular line I'm using publish event
3:30
line I'm using publish event
3:30
line I'm using publish event to this topic I'm sorry to this uh
3:33
to this topic I'm sorry to this uh
3:33
to this topic I'm sorry to this uh component and this is the topic name so
3:37
component and this is the topic name so
3:37
component and this is the topic name so the component name you have to have a
3:40
the component name you have to have a
3:40
the component name you have to have a component with that name in its
3:43
component with that name in its
3:43
component with that name in its metadata that is going to be called or
3:47
metadata that is going to be called or
3:47
metadata that is going to be called or invoked by the dopper
3:49
invoked by the dopper
3:49
invoked by the dopper sidecar so it can send a message to the
3:53
sidecar so it can send a message to the
3:53
sidecar so it can send a message to the patient topic right so of course if we
3:58
patient topic right so of course if we
3:58
patient topic right so of course if we go ahead and not
4:00
go ahead and not
4:00
go ahead and not to the Dapper
4:02
to the Dapper
4:02
to the Dapper folder remember that is inside your home
4:06
folder remember that is inside your home
4:06
folder remember that is inside your home folder and then do dopper here you can
4:09
folder and then do dopper here you can
4:09
folder and then do dopper here you can find this particular structure and
4:13
find this particular structure and
4:13
find this particular structure and inside components you're going to have
4:16
inside components you're going to have
4:16
inside components you're going to have the pops up. jaml file and this is
4:19
the pops up. jaml file and this is
4:19
the pops up. jaml file and this is actually the one that is going to be
4:21
actually the one that is going to be
4:21
actually the one that is going to be involved so we can see in the metad data
4:24
involved so we can see in the metad data
4:24
involved so we can see in the metad data you can see this is a jam file right
4:26
you can see this is a jam file right
4:26
you can see this is a jam file right similar to the ones that we use in
4:28
similar to the ones that we use in
4:28
similar to the ones that we use in kubernetes and this is the pops up
4:32
kubernetes and this is the pops up
4:32
kubernetes and this is the pops up component I can I can identify this by
4:35
component I can I can identify this by
4:35
component I can I can identify this by using the name attribute that is inside
4:38
using the name attribute that is inside
4:38
using the name attribute that is inside the metadata uh attribute this is U you
4:42
the metadata uh attribute this is U you
4:42
the metadata uh attribute this is U you know very similar to the ones that we
4:44
know very similar to the ones that we
4:44
know very similar to the ones that we use in kubernetes since we have API
4:46
use in kubernetes since we have API
4:46
use in kubernetes since we have API version kind metadata and spec and as
4:51
version kind metadata and spec and as
4:51
version kind metadata and spec and as you can see this is configured for using
4:55
you can see this is configured for using
4:55
you can see this is configured for using Rus
4:56
Rus
4:56
Rus particularly my local radius container
5:00
particularly my local radius container
5:00
particularly my local radius container that is running on Port
5:03
that is running on Port
5:03
that is running on Port 6379 here in this computer and this is
5:07
6379 here in this computer and this is
5:07
6379 here in this computer and this is because I'm running Docker desktop and
5:10
because I'm running Docker desktop and
5:10
because I'm running Docker desktop and when I initialized
5:13
when I initialized
5:13
when I initialized Dapper all the different containers were
5:16
Dapper all the different containers were
5:16
Dapper all the different containers were pulled in this particular machine and
5:19
pulled in this particular machine and
5:20
pulled in this particular machine and everything is configured when you
5:22
everything is configured when you
5:22
everything is configured when you initialize daer right so so far so good
5:26
initialize daer right so so far so good
5:26
initialize daer right so so far so good so let's test this out okay
5:30
so let's test this out okay
5:30
so let's test this out okay um as you can see here I'm
5:33
um as you can see here I'm
5:33
um as you can see here I'm running let's stop this and this other
5:36
running let's stop this and this other
5:36
running let's stop this and this other as well since I want to show you the
5:38
as well since I want to show you the
5:38
as well since I want to show you the commands for running the side card
5:40
commands for running the side card
5:40
commands for running the side card that's the magic friends that's the
5:43
that's the magic friends that's the
5:43
that's the magic friends that's the magic that allows you to use the Dapper
5:46
magic that allows you to use the Dapper
5:46
magic that allows you to use the Dapper side card first you need to run the side
5:49
side card first you need to run the side
5:49
side card first you need to run the side card we have different options for doing
5:51
card we have different options for doing
5:51
card we have different options for doing that however I'm G to use the doer wrong
5:55
that however I'm G to use the doer wrong
5:55
that however I'm G to use the doer wrong command since it's uh very flexible
6:00
command since it's uh very flexible
6:00
command since it's uh very flexible and of course this is for local
6:04
and of course this is for local
6:04
and of course this is for local development purposes right so D doer run
6:08
development purposes right so D doer run
6:08
development purposes right so D doer run and then I pass the app ID which is the
6:11
and then I pass the app ID which is the
6:11
and then I pass the app ID which is the name that I want to set for this micros
6:14
name that I want to set for this micros
6:14
name that I want to set for this micros service or
6:15
service or
6:15
service or application in this case is patience and
6:18
application in this case is patience and
6:18
application in this case is patience and then drer HTTP
6:20
then drer HTTP
6:20
then drer HTTP Port this is going to be
6:24
Port this is going to be
6:24
Port this is going to be 55,000 it could be any port you like and
6:28
55,000 it could be any port you like and
6:28
55,000 it could be any port you like and of course I'm using this one because um
6:30
of course I'm using this one because um
6:30
of course I'm using this one because um it works on my machine right now okay
6:33
it works on my machine right now okay
6:33
it works on my machine right now okay and the application Port is
6:36
and the application Port is
6:36
and the application Port is 5500 since after the two dashes you have
6:42
5500 since after the two dashes you have
6:42
5500 since after the two dashes you have complete control over the application
6:46
complete control over the application
6:46
complete control over the application initialization process so of course
6:49
initialization process so of course
6:49
initialization process so of course we're net developers and we use the net
6:52
we're net developers and we use the net
6:52
we're net developers and we use the net CLI for running applications so you can
6:56
CLI for running applications so you can
6:56
CLI for running applications so you can see that I'm using net run and then
6:58
see that I'm using net run and then
6:58
see that I'm using net run and then passing the URL flag for specifying the
7:03
passing the URL flag for specifying the
7:03
passing the URL flag for specifying the the port where this project is going to
7:06
the port where this project is going to
7:06
the port where this project is going to be running right so let's Jump Right In
7:11
be running right so let's Jump Right In
7:11
be running right so let's Jump Right In let's execute this so this is running
7:14
let's execute this so this is running
7:14
let's execute this so this is running the site C is executed and alongside my
7:18
the site C is executed and alongside my
7:18
the site C is executed and alongside my application so that's the patients
7:21
application so that's the patients
7:21
application so that's the patients microservice and this is the same for
7:23
microservice and this is the same for
7:23
microservice and this is the same for the consultations microservice of course
7:27
the consultations microservice of course
7:27
the consultations microservice of course the app ID is different and the topper
7:30
the app ID is different and the topper
7:30
the app ID is different and the topper HTTP Port is different as well and the
7:33
HTTP Port is different as well and the
7:33
HTTP Port is different as well and the application Port
7:35
application Port
7:35
application Port also so let's execute this and I know
7:39
also so let's execute this and I know
7:39
also so let's execute this and I know those two applications are running right
7:41
those two applications are running right
7:42
those two applications are running right now in my machine so I can go ahead and
7:45
now in my machine so I can go ahead and
7:45
now in my machine so I can go ahead and navigate to uh let's say poeman right or
7:49
navigate to uh let's say poeman right or
7:49
navigate to uh let's say poeman right or you can use Curl whatever floats your
7:53
you can use Curl whatever floats your
7:53
you can use Curl whatever floats your boat okay um I'm using um Postman here
7:58
boat okay um I'm using um Postman here
7:58
boat okay um I'm using um Postman here and you can see that I'm pointing
8:00
and you can see that I'm pointing
8:00
and you can see that I'm pointing pointing to this end point which is
8:02
pointing to this end point which is
8:02
pointing to this end point which is patience uh and I'm using post right I'm
8:06
patience uh and I'm using post right I'm
8:06
patience uh and I'm using post right I'm sending this payload pretty easy stuff
8:09
sending this payload pretty easy stuff
8:09
sending this payload pretty easy stuff I'm gonna clear the response because I
8:11
I'm gonna clear the response because I
8:11
I'm gonna clear the response because I was testing this beforehand so let's
8:14
was testing this beforehand so let's
8:14
was testing this beforehand so let's send let's say
8:16
send let's say
8:16
send let's say Stephen
8:19
Stephen
8:19
Stephen Simon right let's send this so the
8:22
Simon right let's send this so the
8:22
Simon right let's send this so the patient is created and it's returning a
8:25
patient is created and it's returning a
8:25
patient is created and it's returning a patient ID pretty easy stuff this is
8:28
patient ID pretty easy stuff this is
8:28
patient ID pretty easy stuff this is just a regular web API this is returning
8:31
just a regular web API this is returning
8:31
just a regular web API this is returning the ID this is the patient ID okay so I
8:35
the ID this is the patient ID okay so I
8:35
the ID this is the patient ID okay so I can go ahead and execute the patients
8:38
can go ahead and execute the patients
8:38
can go ahead and execute the patients endpoint so I can see that this is uh
8:40
endpoint so I can see that this is uh
8:40
endpoint so I can see that this is uh returning all the patients that are
8:43
returning all the patients that are
8:43
returning all the patients that are registered I'm using the Entity
8:45
registered I'm using the Entity
8:45
registered I'm using the Entity framework core and it's in memory
8:49
framework core and it's in memory
8:49
framework core and it's in memory provider since I don't want to you know
8:53
provider since I don't want to you know
8:53
provider since I don't want to you know uh mess around with connection strings
8:56
uh mess around with connection strings
8:56
uh mess around with connection strings and so on that's why I'm using the
8:58
and so on that's why I'm using the
8:58
and so on that's why I'm using the memory provider
9:00
memory provider
9:00
memory provider so far so good so now you can see in
9:03
so far so good so now you can see in
9:03
so far so good so now you can see in this other tab I have the consultations
9:05
this other tab I have the consultations
9:05
this other tab I have the consultations patient end
9:07
patient end
9:07
patient end point so I'm sorry this other
9:11
point so I'm sorry this other
9:11
point so I'm sorry this other one um yes this one consultations
9:16
one um yes this one consultations
9:16
one um yes this one consultations patients since you know I sent that
9:20
patients since you know I sent that
9:20
patients since you know I sent that message to the
9:23
message to the
9:23
message to the topic which is patience and if we see
9:27
topic which is patience and if we see
9:27
topic which is patience and if we see the code inside the consultations
9:30
the code inside the consultations
9:30
the code inside the consultations API we can see that we have this topic
9:35
API we can see that we have this topic
9:35
API we can see that we have this topic attribute and this is the way or one way
9:39
attribute and this is the way or one way
9:39
attribute and this is the way or one way that you can use with zapper
9:42
that you can use with zapper
9:42
that you can use with zapper for um
9:45
for um
9:45
for um asynchronously uh receiving those
9:48
asynchronously uh receiving those
9:48
asynchronously uh receiving those messages right this is beautiful since
9:51
messages right this is beautiful since
9:51
messages right this is beautiful since I'm I'm not you know I'm not using any
9:54
I'm I'm not you know I'm not using any
9:54
I'm I'm not you know I'm not using any kind of SDK for connecting to
9:56
kind of SDK for connecting to
9:56
kind of SDK for connecting to Reddit I'm just specifying this attri
9:59
Reddit I'm just specifying this attri
9:59
Reddit I'm just specifying this attri in this public
10:01
in this public
10:01
in this public endpoint and it's going to receive the
10:04
endpoint and it's going to receive the
10:04
endpoint and it's going to receive the message which is which is a patient
10:06
message which is which is a patient
10:06
message which is which is a patient created in this case I
10:08
created in this case I
10:09
created in this case I repeated
10:10
repeated
10:11
repeated um um this uh model which is right here
10:14
um um this uh model which is right here
10:14
um um this uh model which is right here patient created uh good ID daytime
10:18
patient created uh good ID daytime
10:18
patient created uh good ID daytime created ad preious stuff I'm receiving
10:21
created ad preious stuff I'm receiving
10:21
created ad preious stuff I'm receiving the patient that was
10:23
the patient that was
10:23
the patient that was created and actually that's it I'm using
10:27
created and actually that's it I'm using
10:27
created and actually that's it I'm using another different DB Contex for storing
10:31
another different DB Contex for storing
10:31
another different DB Contex for storing that patient in this other
10:33
that patient in this other
10:34
that patient in this other microservice right so we have two
10:36
microservice right so we have two
10:36
microservice right so we have two different data models one for the
10:39
different data models one for the
10:39
different data models one for the consultations API and this other one for
10:41
consultations API and this other one for
10:41
consultations API and this other one for the patients API so if I execute this
10:45
the patients API so if I execute this
10:45
the patients API so if I execute this this is going to return the
10:48
this is going to return the
10:48
this is going to return the patients inside the consult
10:51
patients inside the consult
10:51
patients inside the consult consultations
10:52
consultations
10:52
consultations microservice make sense since when
10:55
microservice make sense since when
10:55
microservice make sense since when you're creating this kind of
10:57
you're creating this kind of
10:57
you're creating this kind of applications it's
11:00
applications it's
11:00
applications it's sometimes it's not a very good idea to
11:02
sometimes it's not a very good idea to
11:02
sometimes it's not a very good idea to use a single share
11:05
use a single share
11:05
use a single share database uh I believe that's possible
11:07
database uh I believe that's possible
11:07
database uh I believe that's possible and it's um um maybe you have to have a
11:11
and it's um um maybe you have to have a
11:11
and it's um um maybe you have to have a very good reason for using a shared
11:13
very good reason for using a shared
11:13
very good reason for using a shared database maybe you're using this uh I
11:16
database maybe you're using this uh I
11:16
database maybe you're using this uh I don't know Legacy
11:18
don't know Legacy
11:18
don't know Legacy technology very ancient um database that
11:23
technology very ancient um database that
11:23
technology very ancient um database that you can share between your microservices
11:25
you can share between your microservices
11:25
you can share between your microservices and I think that's fine right um but
11:29
and I think that's fine right um but
11:29
and I think that's fine right um but sometimes or generally speaking for
11:31
sometimes or generally speaking for
11:31
sometimes or generally speaking for microservices you want to have different
11:34
microservices you want to have different
11:34
microservices you want to have different uh data stores that's why I'm storing
11:37
uh data stores that's why I'm storing
11:37
uh data stores that's why I'm storing the patient data inside the
11:39
the patient data inside the
11:39
the patient data inside the consultations microservice as
11:42
consultations microservice as
11:42
consultations microservice as well so so far so good and we have this
11:46
well so so far so good and we have this
11:46
well so so far so good and we have this other endpoint for starting a new
11:49
other endpoint for starting a new
11:49
other endpoint for starting a new consultation because the first uh step
11:52
consultation because the first uh step
11:52
consultation because the first uh step was registering the patient itself right
11:56
was registering the patient itself right
11:56
was registering the patient itself right and then you can start a consultation
11:58
and then you can start a consultation
11:58
and then you can start a consultation with that patient and a doctor let's say
12:01
with that patient and a doctor let's say
12:01
with that patient and a doctor let's say that we have this let me clear the
12:04
that we have this let me clear the
12:04
that we have this let me clear the response and I'm going to copy this
12:07
response and I'm going to copy this
12:07
response and I'm going to copy this patient ID let's go back here and say
12:12
patient ID let's go back here and say
12:12
patient ID let's go back here and say you know I want to start a consultation
12:15
you know I want to start a consultation
12:15
you know I want to start a consultation between doctor ID number one and the
12:18
between doctor ID number one and the
12:18
between doctor ID number one and the patient ID that I created who is
12:21
patient ID that I created who is
12:21
patient ID that I created who is um um stepen right so let's start this
12:26
um um stepen right so let's start this
12:26
um um stepen right so let's start this consultation and it's returning this
12:30
consultation and it's returning this
12:30
consultation and it's returning this payload um and this is possible since I
12:34
payload um and this is possible since I
12:34
payload um and this is possible since I have the patient ID record itself inside
12:39
have the patient ID record itself inside
12:39
have the patient ID record itself inside the consultations
12:40
the consultations
12:40
the consultations database right and I can go ahead and
12:45
database right and I can go ahead and
12:45
database right and I can go ahead and use this other endpoint which is
12:46
use this other endpoint which is
12:46
use this other endpoint which is consultations and I'm passing this
12:49
consultations and I'm passing this
12:49
consultations and I'm passing this consultation
12:51
consultation
12:51
consultation ID and let's execute this and you can
12:54
ID and let's execute this and you can
12:54
ID and let's execute this and you can see that I'm
12:55
see that I'm
12:56
see that I'm returning the complete information about
12:59
returning the complete information about
12:59
returning the complete information about that
13:00
that
13:00
that consultation but in this case I'm
13:03
consultation but in this case I'm
13:03
consultation but in this case I'm showing you another building block that
13:07
showing you another building block that
13:07
showing you another building block that is the service to service communication
13:10
is the service to service communication
13:10
is the service to service communication building
13:11
building
13:11
building block and this is because you can see
13:14
block and this is because you can see
13:14
block and this is because you can see here right I'm exposing this
13:18
here right I'm exposing this
13:18
here right I'm exposing this endpoint and of course I'm injecting the
13:20
endpoint and of course I'm injecting the
13:20
endpoint and of course I'm injecting the daper client object since I'm using the
13:22
daper client object since I'm using the
13:22
daper client object since I'm using the doet S
13:24
doet S
13:24
doet S ZK and here line 60 I'm using in both
13:29
ZK and here line 60 I'm using in both
13:29
ZK and here line 60 I'm using in both bulk method
13:30
bulk method
13:30
bulk method acing so this is the way that we can use
13:34
acing so this is the way that we can use
13:34
acing so this is the way that we can use in the net SDK for topper for invoking a
13:39
in the net SDK for topper for invoking a
13:39
in the net SDK for topper for invoking a method that is exposed in this other
13:42
method that is exposed in this other
13:42
method that is exposed in this other microservice right so inside the
13:45
microservice right so inside the
13:46
microservice right so inside the consultations microservice I'm invoking
13:48
consultations microservice I'm invoking
13:48
consultations microservice I'm invoking the patients
13:50
the patients
13:50
the patients microservice specifically this endpoint
13:53
microservice specifically this endpoint
13:53
microservice specifically this endpoint which is patients forward slash patient
13:57
which is patients forward slash patient
13:57
which is patients forward slash patient ID right so that's why the first thing I
14:01
ID right so that's why the first thing I
14:01
ID right so that's why the first thing I do is retrieving the consultation record
14:05
do is retrieving the consultation record
14:05
do is retrieving the consultation record itself then I'm obtaining the patient ID
14:09
itself then I'm obtaining the patient ID
14:09
itself then I'm obtaining the patient ID and that's why I'm able to send this uh
14:13
and that's why I'm able to send this uh
14:13
and that's why I'm able to send this uh request to the patient microservice and
14:16
request to the patient microservice and
14:16
request to the patient microservice and that's why I'm uh you know creating this
14:19
that's why I'm uh you know creating this
14:19
that's why I'm uh you know creating this Dynamic object and because I want to
14:23
Dynamic object and because I want to
14:23
Dynamic object and because I want to keep things simple and I'm returning the
14:27
keep things simple and I'm returning the
14:27
keep things simple and I'm returning the the the first name and last name of the
14:30
the the first name and last name of the
14:30
the the first name and last name of the patient
14:31
patient
14:31
patient right
14:33
right
14:34
right so pretty easy stuff and Powerful things
14:37
so pretty easy stuff and Powerful things
14:37
so pretty easy stuff and Powerful things that we can do with the service to
14:40
that we can do with the service to
14:40
that we can do with the service to service invocation building block so
14:43
service invocation building block so
14:43
service invocation building block so this is actually what's happening here
14:47
this is actually what's happening here
14:47
this is actually what's happening here um I'm using you know consultations and
14:51
um I'm using you know consultations and
14:51
um I'm using you know consultations and I'm communicating to the patients
14:54
I'm communicating to the patients
14:54
I'm communicating to the patients microservice and there are some features
14:56
microservice and there are some features
14:56
microservice and there are some features that the service invocation building
14:58
that the service invocation building
14:58
that the service invocation building block has
14:59
block has
14:59
block has and I strongly recommend you go to this
15:03
and I strongly recommend you go to this
15:03
and I strongly recommend you go to this um service to service
15:05
um service to service
15:05
um service to service invocation session that was recorded and
15:08
invocation session that was recorded and
15:08
invocation session that was recorded and you can watch the entire video about the
15:11
you can watch the entire video about the
15:11
you can watch the entire video about the service invocation building block so the
15:14
service invocation building block so the
15:14
service invocation building block so the thing about that building block is that
15:17
thing about that building block is that
15:17
thing about that building block is that it allows you to do precisely this and
15:22
it allows you to do precisely this and
15:22
it allows you to do precisely this and it allows you to use different name
15:24
it allows you to use different name
15:25
it allows you to use different name resolution
15:26
resolution
15:26
resolution Technologies um in this particular cas
15:29
Technologies um in this particular cas
15:29
Technologies um in this particular cas Cas I'm using mdns since I'm running in
15:32
Cas I'm using mdns since I'm running in
15:32
Cas I'm using mdns since I'm running in Windows and I don't need to configure
15:35
Windows and I don't need to configure
15:35
Windows and I don't need to configure anything else however you can also use
15:39
anything else however you can also use
15:40
anything else however you can also use some other Technologies for example I
15:43
some other Technologies for example I
15:43
some other Technologies for example I don't know uh hash cor console right or
15:47
don't know uh hash cor console right or
15:47
don't know uh hash cor console right or others
15:49
others
15:49
others um I think console is a very popular
15:52
um I think console is a very popular
15:52
um I think console is a very popular option when you have you know hundreds
15:56
option when you have you know hundreds
15:56
option when you have you know hundreds of different microservices and you need
15:58
of different microservices and you need
15:58
of different microservices and you need to have
16:00
to have
16:00
to have scalability uh for the name resolution
16:02
scalability uh for the name resolution
16:02
scalability uh for the name resolution processes in your
16:05
processes in your
16:05
processes in your Solutions so perfect perfect and you can
16:08
Solutions so perfect perfect and you can
16:08
Solutions so perfect perfect and you can also have
16:10
also have
16:10
also have resiliency uh this is not only for the
16:13
resiliency uh this is not only for the
16:13
resiliency uh this is not only for the service invocation building block but
16:15
service invocation building block but
16:15
service invocation building block but also for the state management and
16:18
also for the state management and
16:18
also for the state management and bindings and some
16:20
bindings and some
16:20
bindings and some others and this is a file that you can
16:25
others and this is a file that you can
16:25
others and this is a file that you can specify and this is a jamama file
16:28
specify and this is a jamama file
16:29
specify and this is a jamama file similar to the ones that we use in
16:30
similar to the ones that we use in
16:30
similar to the ones that we use in kubernetes and for other components and
16:33
kubernetes and for other components and
16:33
kubernetes and for other components and this is actually the um contents of that
16:37
this is actually the um contents of that
16:37
this is actually the um contents of that resiliency jaml file that you can
16:41
resiliency jaml file that you can
16:41
resiliency jaml file that you can specify for example you can see that I
16:44
specify for example you can see that I
16:44
specify for example you can see that I have API version kind the kind is
16:46
have API version kind the kind is
16:46
have API version kind the kind is resiliency metadata and you have to
16:49
resiliency metadata and you have to
16:49
resiliency metadata and you have to specify the Scopes the Scopes and the
16:52
specify the Scopes the Scopes and the
16:52
specify the Scopes the Scopes and the kind of policies that you want
16:55
kind of policies that you want
16:55
kind of policies that you want toose for this resiliency policy
16:59
toose for this resiliency policy
16:59
toose for this resiliency policy uh I'm sorry for this resiliency
17:01
uh I'm sorry for this resiliency
17:01
uh I'm sorry for this resiliency document for instance timeouts retries
17:04
document for instance timeouts retries
17:04
document for instance timeouts retries circuit breakers and so on and let me
17:08
circuit breakers and so on and let me
17:08
circuit breakers and so on and let me show you one
17:10
show you one
17:10
show you one example right so you specify this file
17:14
example right so you specify this file
17:14
example right so you specify this file and implement it um inside a folder when
17:18
and implement it um inside a folder when
17:18
and implement it um inside a folder when you're developing Your
17:20
you're developing Your
17:20
you're developing Your solution or of course you can apply it
17:24
solution or of course you can apply it
17:24
solution or of course you can apply it in your kubernetes cluster uh just like
17:27
in your kubernetes cluster uh just like
17:27
in your kubernetes cluster uh just like any other object
17:29
any other object
17:29
any other object right remember resiliency is not only
17:32
right remember resiliency is not only
17:32
right remember resiliency is not only for service invocation but also for
17:35
for service invocation but also for
17:35
for service invocation but also for State Management and bindings and I
17:38
State Management and bindings and I
17:38
State Management and bindings and I strongly recommend you go back to the
17:40
strongly recommend you go back to the
17:40
strongly recommend you go back to the other sessions where I um I was using
17:45
other sessions where I um I was using
17:45
other sessions where I um I was using that resiliency doj file for um for
17:50
that resiliency doj file for um for
17:50
that resiliency doj file for um for showing that
17:51
showing that
17:51
showing that capability so State Management State
17:54
capability so State Management State
17:54
capability so State Management State Management is another building block
17:56
Management is another building block
17:57
Management is another building block again you can go back in time and watch
17:59
again you can go back in time and watch
17:59
again you can go back in time and watch the recordings here in C
18:02
the recordings here in C
18:03
the recordings here in C TV and State Management is quite
18:08
TV and State Management is quite
18:08
TV and State Management is quite useful uh for storing state right hence
18:12
useful uh for storing state right hence
18:12
useful uh for storing state right hence the
18:13
the
18:13
the name but of course don't be confused
18:16
name but of course don't be confused
18:16
name but of course don't be confused about the State Management building
18:17
about the State Management building
18:18
about the State Management building block since it's not an
18:20
block since it's not an
18:20
block since it's not an omm okay this is not a replacement for
18:23
omm okay this is not a replacement for
18:23
omm okay this is not a replacement for your regular
18:25
your regular
18:25
your regular database right this is for restoring
18:28
database right this is for restoring
18:28
database right this is for restoring state sometimes that state could be just
18:31
state sometimes that state could be just
18:31
state sometimes that state could be just a key value pair or maybe it could be a
18:35
a key value pair or maybe it could be a
18:35
a key value pair or maybe it could be a quite complicated structure or document
18:40
quite complicated structure or document
18:40
quite complicated structure or document uh however this is not a relational
18:42
uh however this is not a relational
18:42
uh however this is not a relational database this is not a replacement for a
18:44
database this is not a replacement for a
18:44
database this is not a replacement for a norm or so on okay
18:49
norm or so on okay
18:49
norm or so on okay so again you use the dopper side car and
18:52
so again you use the dopper side car and
18:52
so again you use the dopper side car and you save the state and you somehow use
18:54
you save the state and you somehow use
18:54
you save the state and you somehow use it for your
18:56
it for your
18:56
it for your purposes and nowadays we have a lot of
19:00
purposes and nowadays we have a lot of
19:00
purposes and nowadays we have a lot of different components for State
19:03
different components for State
19:03
different components for State Management and you can see in this
19:06
Management and you can see in this
19:06
Management and you can see in this particular screenshot I'm
19:09
particular screenshot I'm
19:09
particular screenshot I'm displaying the the ones related to
19:11
displaying the the ones related to
19:11
displaying the the ones related to Microsoft Asher right but of course
19:14
Microsoft Asher right but of course
19:14
Microsoft Asher right but of course there are some
19:15
there are some
19:15
there are some others and let's go ahead and let's go
19:20
others and let's go ahead and let's go
19:20
others and let's go ahead and let's go back
19:21
back
19:21
back here
19:23
here
19:23
here so let's use this other branch which is
19:26
so let's use this other branch which is
19:26
so let's use this other branch which is State end
19:29
State end
19:29
State end so in this other case let me show you
19:32
so in this other case let me show you
19:32
so in this other case let me show you what I did
19:35
what I did
19:35
what I did okay let's open up patient
19:38
okay let's open up patient
19:38
okay let's open up patient controller so far so good nothing
19:42
controller so far so good nothing
19:42
controller so far so good nothing changed right I'm using publish event
19:45
changed right I'm using publish event
19:46
changed right I'm using publish event this is the pops up building block let's
19:49
this is the pops up building block let's
19:49
this is the pops up building block let's go and open the consultations controller
19:53
go and open the consultations controller
19:53
go and open the consultations controller class
19:55
class
19:55
class and let's see what's going on here
20:00
and right here line
20:04
and right here line
20:04
and right here line 80 as you can see here in the method
20:08
80 as you can see here in the method
20:08
80 as you can see here in the method that is um being invoked by the forward
20:13
that is um being invoked by the forward
20:13
that is um being invoked by the forward slash consultation ID when retrieving a
20:17
slash consultation ID when retrieving a
20:17
slash consultation ID when retrieving a particular
20:18
particular
20:18
particular consultation I'm
20:20
consultation I'm
20:20
consultation I'm storing the state for that particular
20:24
storing the state for that particular
20:24
storing the state for that particular consultation instead of you know just
20:28
consultation instead of you know just
20:28
consultation instead of you know just going
20:29
going
20:29
going every single time to the uh well
20:31
every single time to the uh well
20:32
every single time to the uh well actually I need to use some kind of if
20:34
actually I need to use some kind of if
20:34
actually I need to use some kind of if right because here I'm saving the
20:38
right because here I'm saving the
20:38
right because here I'm saving the state this is the state story this is
20:40
state this is the state story this is
20:40
state this is the state story this is the uh component name and then the key
20:44
the uh component name and then the key
20:44
the uh component name and then the key and finally the
20:46
and finally the
20:46
and finally the value right so I'm using a state store
20:51
value right so I'm using a state store
20:51
value right so I'm using a state store again let's go back to the components
20:54
again let's go back to the components
20:54
again let's go back to the components folder state
20:56
folder state
20:56
folder state store so this is the name
20:59
store so this is the name
20:59
store so this is the name this is the most important one right so
21:03
this is the most important one right so
21:03
this is the most important one right so state store and in this case I'm using
21:06
state store and in this case I'm using
21:06
state store and in this case I'm using red as well since that's how it's
21:10
red as well since that's how it's
21:10
red as well since that's how it's configured when you initialize theer so
21:13
configured when you initialize theer so
21:13
configured when you initialize theer so it state store and this is going to
21:16
it state store and this is going to
21:16
it state store and this is going to store the state in
21:18
store the state in
21:18
store the state in redish however just identify how
21:22
redish however just identify how
21:22
redish however just identify how beautiful this is since I'm not using
21:25
beautiful this is since I'm not using
21:25
beautiful this is since I'm not using redis itself I'm not using the nuget
21:28
redis itself I'm not using the nuget
21:28
redis itself I'm not using the nuget package for Reddit or so on right I'm
21:31
package for Reddit or so on right I'm
21:31
package for Reddit or so on right I'm just using the doer client as G this is
21:36
just using the doer client as G this is
21:36
just using the doer client as G this is marvelous this is
21:38
marvelous this is
21:38
marvelous this is fantastic so I'm storing the state and
21:41
fantastic so I'm storing the state and
21:41
fantastic so I'm storing the state and of course I need some way to you know
21:44
of course I need some way to you know
21:44
of course I need some way to you know validate if the state is right there
21:48
validate if the state is right there
21:48
validate if the state is right there right I can use get state for
21:52
right I can use get state for
21:52
right I can use get state for example or
21:55
example or
21:55
example or try try safe State this is another one
21:58
try try safe State this is another one
21:58
try try safe State this is another one that I could use instead of just using
22:00
that I could use instead of just using
22:00
that I could use instead of just using Save
22:02
Save
22:02
Save State anyway I can go ahead and query
22:06
State anyway I can go ahead and query
22:06
State anyway I can go ahead and query the state and verify if that particular
22:09
the state and verify if that particular
22:09
the state and verify if that particular key exists
22:12
key exists
22:12
key exists already and if that's the case I can
22:14
already and if that's the case I can
22:14
already and if that's the case I can retrieve the object instead of using the
22:18
retrieve the object instead of using the
22:18
retrieve the object instead of using the service to service invocation build
22:20
service to service invocation build
22:20
service to service invocation build building block so you can see that this
22:23
building block so you can see that this
22:23
building block so you can see that this is some kind of cache right uh that you
22:27
is some kind of cache right uh that you
22:27
is some kind of cache right uh that you can use for your your Solutions so let's
22:31
can use for your your Solutions so let's
22:31
can use for your your Solutions so let's go ahead
22:32
go ahead
22:32
go ahead and let's see what's going on
22:35
and let's see what's going on
22:35
and let's see what's going on here let's start the
22:39
here let's start the
22:39
here let's start the current um application let's run this
22:44
current um application let's run this
22:44
current um application let's run this right before I do this let me show
22:48
right before I do this let me show
22:48
right before I do this let me show you if I have another folder no this is
22:51
you if I have another folder no this is
22:51
you if I have another folder no this is not the branch that I where I have other
22:55
not the branch that I where I have other
22:55
not the branch that I where I have other folders anyway let's go back to patients
22:59
folders anyway let's go back to patients
22:59
folders anyway let's go back to patients daeron
23:00
daeron
23:00
daeron patients
23:02
patients
23:02
patients and daeron
23:05
and daeron
23:05
and daeron consultations and remember friends you
23:08
consultations and remember friends you
23:08
consultations and remember friends you can also use Dapper dashboard right for
23:13
can also use Dapper dashboard right for
23:13
can also use Dapper dashboard right for inspecting your current Dapper
23:17
inspecting your current Dapper
23:17
inspecting your current Dapper applications uh by default this is
23:19
applications uh by default this is
23:19
applications uh by default this is running on port
23:20
running on port
23:20
running on port 8080 and you can see that both patients
23:24
8080 and you can see that both patients
23:24
8080 and you can see that both patients and
23:26
and
23:26
and consultations um are running right now
23:28
consultations um are running right now
23:28
consultations um are running right now in this in this machine right so you can
23:31
in this in this machine right so you can
23:31
in this in this machine right so you can go ahead and navigate to a particular
23:33
go ahead and navigate to a particular
23:33
go ahead and navigate to a particular application and understand all the
23:36
application and understand all the
23:37
application and understand all the different parameters and flags and uh
23:40
different parameters and flags and uh
23:40
different parameters and flags and uh information related to that uh
23:42
information related to that uh
23:42
information related to that uh application
23:44
application
23:44
application right pretty pretty
23:46
right pretty pretty
23:46
right pretty pretty cool okay so let's go back here this is
23:50
cool okay so let's go back here this is
23:50
cool okay so let's go back here this is running okay both applications are
23:53
running okay both applications are
23:53
running okay both applications are running and now let's try to do the
23:56
running and now let's try to do the
23:56
running and now let's try to do the same remember that I'm using the memory
24:00
same remember that I'm using the memory
24:00
same remember that I'm using the memory provider that's why I need to create a a
24:03
provider that's why I need to create a a
24:03
provider that's why I need to create a a new patient otherwise I need to use I
24:07
new patient otherwise I need to use I
24:07
new patient otherwise I need to use I don't know the SQL life provider for
24:09
don't know the SQL life provider for
24:09
don't know the SQL life provider for ntity framework ore or some other um um
24:15
ntity framework ore or some other um um
24:15
ntity framework ore or some other um um other storage right other
24:18
other storage right other
24:18
other storage right other database anyway let's create Steven
24:22
database anyway let's create Steven
24:22
database anyway let's create Steven Simon this is a new ID right and then I
24:26
Simon this is a new ID right and then I
24:26
Simon this is a new ID right and then I can go ahead and query all the different
24:29
can go ahead and query all the different
24:29
can go ahead and query all the different patients so far so
24:31
patients so far so
24:31
patients so far so good now let's return to the
24:33
good now let's return to the
24:33
good now let's return to the consultations microservice execute this
24:36
consultations microservice execute this
24:36
consultations microservice execute this this is returning the patients nothing
24:40
this is returning the patients nothing
24:40
this is returning the patients nothing fancy since the message was
24:43
fancy since the message was
24:43
fancy since the message was asynchronously sent between patients and
24:48
asynchronously sent between patients and
24:48
asynchronously sent between patients and consultations right and then let's go
24:52
consultations right and then let's go
24:52
consultations right and then let's go ahead
24:53
ahead
24:53
ahead and let's clear the response just to
24:57
and let's clear the response just to
24:57
and let's clear the response just to understand what's what's going on here
25:00
understand what's what's going on here
25:00
understand what's what's going on here so I'm starting this consultation
25:03
so I'm starting this consultation
25:03
so I'm starting this consultation between Stephen Simon and Dr ID number
25:06
between Stephen Simon and Dr ID number
25:06
between Stephen Simon and Dr ID number one and this is returning a consultation
25:10
one and this is returning a consultation
25:10
one and this is returning a consultation ID which is number one as
25:12
ID which is number one as
25:12
ID which is number one as well and I can go ahead and do this
25:16
well and I can go ahead and do this
25:16
well and I can go ahead and do this however in this particular case the
25:18
however in this particular case the
25:18
however in this particular case the state was stored in
25:21
state was stored in
25:21
state was stored in redis how can I know that um
25:26
redis how can I know that um
25:26
redis how can I know that um let's open up
25:28
let's open up
25:28
let's open up the
25:31
terminal radius Commander this is a
25:35
terminal radius Commander this is a
25:35
terminal radius Commander this is a useful tool for
25:37
useful tool for
25:37
useful tool for inspecting your radius
25:40
inspecting your radius
25:40
inspecting your radius components right so here's the
25:45
components right so here's the
25:45
components right so here's the consultations
25:47
consultations
25:47
consultations consultation dash one and this is the
25:53
consultation dash one and this is the
25:53
consultation dash one and this is the entire object that I stored
25:56
entire object that I stored
25:56
entire object that I stored right pretty easy
25:59
right pretty easy
25:59
right pretty easy stuff and of course I could you know add
26:04
stuff and of course I could you know add
26:04
stuff and of course I could you know add a new if statement and verify if the key
26:09
a new if statement and verify if the key
26:09
a new if statement and verify if the key exists and if that's the case I can
26:12
exists and if that's the case I can
26:12
exists and if that's the case I can retrieve the object and deserialize it
26:15
retrieve the object and deserialize it
26:15
retrieve the object and deserialize it and so on
26:17
and so on
26:17
and so on right so the key thing here is that um
26:22
right so the key thing here is that um
26:22
right so the key thing here is that um with one single line of code we are
26:25
with one single line of code we are
26:25
with one single line of code we are storing the state quite
26:29
storing the state quite
26:29
storing the state quite beautifully right no nug packages no
26:34
beautifully right no nug packages no
26:34
beautifully right no nug packages no external uh
26:36
external uh
26:36
external uh dependencies just the Dapper side car
26:40
dependencies just the Dapper side car
26:40
dependencies just the Dapper side car which is
26:41
which is
26:41
which is wonderful okay so
26:44
wonderful okay so
26:44
wonderful okay so now so far so good state is
26:48
now so far so good state is
26:48
now so far so good state is fantastic let's go back to the
26:50
fantastic let's go back to the
26:50
fantastic let's go back to the PowerPoint remember that this is the
26:52
PowerPoint remember that this is the
26:52
PowerPoint remember that this is the learning
26:54
learning
26:54
learning checkpoint
26:56
checkpoint
26:56
checkpoint and with the state manag agement you can
27:00
and with the state manag agement you can
27:00
and with the state manag agement you can use a lot of different State
27:03
use a lot of different State
27:03
use a lot of different State Stores um in this case I'm just using
27:07
Stores um in this case I'm just using
27:07
Stores um in this case I'm just using redis
27:09
redis
27:09
redis right and you have two different
27:12
right and you have two different
27:12
right and you have two different consistency
27:13
consistency
27:13
consistency options and the first one is the strong
27:17
options and the first one is the strong
27:17
options and the first one is the strong consistency and the other one is the
27:19
consistency and the other one is the
27:19
consistency and the other one is the eventual
27:20
eventual
27:20
eventual consistency however if you're building
27:23
consistency however if you're building
27:23
consistency however if you're building distributed applications I completely
27:26
distributed applications I completely
27:26
distributed applications I completely recommend you embrace eventual
27:29
recommend you embrace eventual
27:29
recommend you embrace eventual consistency right because you have
27:32
consistency right because you have
27:32
consistency right because you have different components you have dozens of
27:34
different components you have dozens of
27:34
different components you have dozens of different
27:35
different
27:35
different components um running in different nodes
27:39
components um running in different nodes
27:39
components um running in different nodes in clusters so it's uh having strong
27:43
in clusters so it's uh having strong
27:43
in clusters so it's uh having strong consistency is uh it could impact
27:47
consistency is uh it could impact
27:47
consistency is uh it could impact negatively your
27:50
negatively your
27:50
negatively your scalability that's why you have to
27:52
scalability that's why you have to
27:52
scalability that's why you have to embrace eventual consistency and you
27:54
embrace eventual consistency and you
27:54
embrace eventual consistency and you have to have the mindset for eventual
27:57
have to have the mindset for eventual
27:57
have to have the mindset for eventual consist consy and sometimes that's the
28:00
consist consy and sometimes that's the
28:01
consist consy and sometimes that's the you know the most difficult part when
28:03
you know the most difficult part when
28:03
you know the most difficult part when creating distributed
28:05
creating distributed
28:05
creating distributed applications the mindset of knowing that
28:08
applications the mindset of knowing that
28:08
applications the mindset of knowing that you don't have all the tables for your
28:12
you don't have all the tables for your
28:12
you don't have all the tables for your queries right you don't have the table
28:15
queries right you don't have the table
28:15
queries right you don't have the table right there for using you know for
28:17
right there for using you know for
28:17
right there for using you know for executing left join or inner join or
28:20
executing left join or inner join or
28:20
executing left join or inner join or whatnot right you don't have that you
28:23
whatnot right you don't have that you
28:23
whatnot right you don't have that you have to embrace eventual consistency
28:29
marvelous
28:31
marvelous
28:31
marvelous um so yeah again I strongly uh suggest
28:36
um so yeah again I strongly uh suggest
28:36
um so yeah again I strongly uh suggest you go back in time and watch the
28:37
you go back in time and watch the
28:37
you go back in time and watch the recording of the State Management
28:39
recording of the State Management
28:39
recording of the State Management building blog
28:41
building blog
28:41
building blog okay and you can also implement the
28:44
okay and you can also implement the
28:44
okay and you can also implement the transactional outbox
28:47
transactional outbox
28:47
transactional outbox pattern and this is quite useful for
28:49
pattern and this is quite useful for
28:49
pattern and this is quite useful for microservices applications because
28:52
microservices applications because
28:52
microservices applications because sometimes you need to save the state of
28:55
sometimes you need to save the state of
28:55
sometimes you need to save the state of a particular object that's say the
28:59
a particular object that's say the
28:59
a particular object that's say the patient right and at the same
29:02
patient right and at the same
29:03
patient right and at the same time and in a single
29:06
time and in a single
29:06
time and in a single transaction you want to send the message
29:09
transaction you want to send the message
29:09
transaction you want to send the message to a message
29:11
to a message
29:11
to a message broker instead of implementing two
29:14
broker instead of implementing two
29:14
broker instead of implementing two different processes isolated processes
29:18
different processes isolated processes
29:18
different processes isolated processes right um this is for consistency options
29:22
right um this is for consistency options
29:22
right um this is for consistency options in for consistency sake
29:25
in for consistency sake
29:25
in for consistency sake right and the transaction out books
29:28
right and the transaction out books
29:28
right and the transaction out books pattern can help you with that
29:32
pattern can help you with that
29:32
pattern can help you with that consistency since it allows you to save
29:35
consistency since it allows you to save
29:35
consistency since it allows you to save the state
29:36
the state
29:36
the state and
29:38
and
29:38
and publish the
29:40
publish the
29:40
publish the message in a single
29:43
message in a single
29:43
message in a single transaction okay this is for
29:46
transaction okay this is for
29:46
transaction okay this is for notifying the other component or
29:48
notifying the other component or
29:48
notifying the other component or application that something
29:52
happened so you have to enable
29:54
happened so you have to enable
29:54
happened so you have to enable transactional outbox uh inside your
29:57
transactional outbox uh inside your
29:57
transactional outbox uh inside your component
29:58
component
29:58
component and I have some examples here and again
30:02
and I have some examples here and again
30:02
and I have some examples here and again I strongly suggest you go back in time
30:05
I strongly suggest you go back in time
30:05
I strongly suggest you go back in time and watch the recording of the State
30:07
and watch the recording of the State
30:07
and watch the recording of the State Management building
30:09
Management building
30:09
Management building block uh sapna is asking from where I
30:13
block uh sapna is asking from where I
30:13
block uh sapna is asking from where I can get recorded
30:15
can get recorded
30:15
can get recorded sessions so that's a great question so
30:20
sessions so that's a great question so
30:20
sessions so that's a great question so recorded sessions are that that's my man
30:23
recorded sessions are that that's my man
30:23
recorded sessions are that that's my man that's my man Steven Simon showing you
30:27
that's my man Steven Simon showing you
30:27
that's my man Steven Simon showing you the YouTube channel for C
30:31
the YouTube channel for C
30:31
the YouTube channel for C TV in that channel you can watch all the
30:34
TV in that channel you can watch all the
30:35
TV in that channel you can watch all the recordings for the Dapper for this
30:37
recordings for the Dapper for this
30:37
recordings for the Dapper for this Dapper in action um um
30:40
Dapper in action um um
30:40
Dapper in action um um show and of course there are some other
30:43
show and of course there are some other
30:43
show and of course there are some other fantastic
30:44
fantastic
30:44
fantastic shows um that C Corner has in that
30:48
shows um that C Corner has in that
30:48
shows um that C Corner has in that YouTube channel as
30:51
YouTube channel as
30:51
YouTube channel as well cool now bindings if you are a
30:56
well cool now bindings if you are a
30:56
well cool now bindings if you are a natural functions developer
30:58
natural functions developer
30:58
natural functions developer bindings can be quite uh familiar to you
31:05
bindings can be quite uh familiar to you
31:05
bindings can be quite uh familiar to you since bindings
31:08
since bindings
31:08
since bindings are objects that allow you to trigger
31:11
are objects that allow you to trigger
31:11
are objects that allow you to trigger your application with some data and
31:14
your application with some data and
31:14
your application with some data and communicate to other components or or
31:17
communicate to other components or or
31:17
communicate to other components or or external
31:18
external
31:18
external applications with that particular data
31:22
applications with that particular data
31:22
applications with that particular data or some other data right so this is just
31:25
or some other data right so this is just
31:25
or some other data right so this is just a way for creating event driven
31:28
a way for creating event driven
31:28
a way for creating event driven applications since an event is
31:31
applications since an event is
31:31
applications since an event is triggering your application
31:34
triggering your application
31:34
triggering your application somehow or
31:35
somehow or
31:36
somehow or microservice and then your code is
31:39
microservice and then your code is
31:39
microservice and then your code is reacting your code is running and you
31:42
reacting your code is running and you
31:42
reacting your code is running and you can go ahead and interface your
31:44
can go ahead and interface your
31:44
can go ahead and interface your application with other
31:46
application with other
31:46
application with other external uh
31:50
external uh
31:50
external uh systems and this is actually what's
31:52
systems and this is actually what's
31:52
systems and this is actually what's what's happening in AER functions right
31:54
what's happening in AER functions right
31:54
what's happening in AER functions right if you happen to be an AER functions
31:56
if you happen to be an AER functions
31:56
if you happen to be an AER functions developer
31:58
developer
31:58
developer uh this is what we
32:00
uh this is what we
32:00
uh this is what we do we Implement triggers and bindings
32:03
do we Implement triggers and bindings
32:03
do we Implement triggers and bindings and basically that's
32:05
and basically that's
32:05
and basically that's it so
32:07
it so
32:07
it so bindings they allowed you to avoid the
32:10
bindings they allowed you to avoid the
32:10
bindings they allowed you to avoid the complexities of connecting
32:12
complexities of connecting
32:12
complexities of connecting to and ping from other systems or
32:18
to and ping from other systems or
32:18
to and ping from other systems or applications so this is the this is an
32:22
applications so this is the this is an
32:22
applications so this is the this is an example of a
32:23
example of a
32:23
example of a component for
32:26
component for
32:26
component for bindings again API version kind metadata
32:30
bindings again API version kind metadata
32:30
bindings again API version kind metadata and spec and you can see that inside the
32:35
and spec and you can see that inside the
32:35
and spec and you can see that inside the type that is in the spec you specify
32:38
type that is in the spec you specify
32:38
type that is in the spec you specify what kind of binding you're referring to
32:41
what kind of binding you're referring to
32:41
what kind of binding you're referring to so that's it that is actually the slides
32:45
so that's it that is actually the slides
32:45
so that's it that is actually the slides for bindings let's go back to the code
32:49
for bindings let's go back to the code
32:49
for bindings let's go back to the code in
32:51
in
32:51
in here I'm sorry about that bindings and
32:56
here I'm sorry about that bindings and
32:56
here I'm sorry about that bindings and okay bindings and and what happened in
33:01
okay bindings and and what happened in
33:01
okay bindings and and what happened in this other Branch let me show
33:04
this other Branch let me show
33:04
this other Branch let me show you let's go back here and stop this and
33:08
you let's go back here and stop this and
33:08
you let's go back here and stop this and also
33:09
also
33:09
also this
33:11
this
33:11
this right so far so good now let me show
33:16
right so far so good now let me show
33:16
right so far so good now let me show you what's going on
33:18
you what's going on
33:18
you what's going on here patience controller this is the
33:21
here patience controller this is the
33:21
here patience controller this is the place where we register
33:24
place where we register
33:24
place where we register patients and in this case
33:28
patients and in this case
33:28
patients and in this case I think everything is the same I'm just
33:31
I think everything is the same I'm just
33:31
I think everything is the same I'm just publishing the event right everything is
33:35
publishing the event right everything is
33:35
publishing the event right everything is the same
33:36
the same
33:36
the same now but if I open the consultations
33:40
now but if I open the consultations
33:40
now but if I open the consultations controller class we can
33:44
controller class we can
33:44
controller class we can see
33:46
see
33:46
see um where is
33:48
um where is
33:48
um where is it this is the place for the pops up
33:52
it this is the place for the pops up
33:52
it this is the place for the pops up component um service to service
33:55
component um service to service
33:55
component um service to service invocation and
34:01
um is this the
34:04
um is this the
34:04
um is this the place HD to be post start
34:08
place HD to be post start
34:08
place HD to be post start and I believe
34:11
and I believe
34:11
and I believe so so you know because I created this
34:14
so so you know because I created this
34:14
so so you know because I created this code the other day let me show
34:18
code the other day let me show
34:18
code the other day let me show you what's going on here in this
34:22
you what's going on here in this
34:22
you what's going on here in this branch which is bindings and I have this
34:26
branch which is bindings and I have this
34:26
branch which is bindings and I have this other folder
34:30
where I have this Q's jamama
34:33
where I have this Q's jamama
34:33
where I have this Q's jamama file
34:35
file
34:35
file and what's happening here
34:38
and what's happening here
34:38
and what's happening here is that I'm
34:40
is that I'm
34:40
is that I'm using a ner storage queue I'm using an
34:44
using a ner storage queue I'm using an
34:45
using a ner storage queue I'm using an the storage account that I deployed in
34:47
the storage account that I deployed in
34:47
the storage account that I deployed in my Azure
34:48
my Azure
34:49
my Azure account and I'm sending some cues or
34:55
account and I'm sending some cues or
34:55
account and I'm sending some cues or receiving cues that's what what I need
34:57
receiving cues that's what what I need
34:57
receiving cues that's what what I need to check uh right now and this is the
35:01
to check uh right now and this is the
35:01
to check uh right now and this is the way for connecting to the storage
35:03
way for connecting to the storage
35:03
way for connecting to the storage account specifically to the Q uh to the
35:06
account specifically to the Q uh to the
35:06
account specifically to the Q uh to the q's um
35:08
q's um
35:08
q's um um capability of that Asher account so
35:13
um capability of that Asher account so
35:13
um capability of that Asher account so let's me let me show you or let me see
35:16
let's me let me show you or let me see
35:16
let's me let me show you or let me see what's going on here since I don't
35:17
what's going on here since I don't
35:17
what's going on here since I don't remember this particular implementation
35:19
remember this particular implementation
35:19
remember this particular implementation that I did the other
35:21
that I did the other
35:21
that I did the other day uh
35:24
day uh
35:24
day uh so um I don't believe I'm using
35:28
so um I don't believe I'm using
35:28
so um I don't believe I'm using that am I am I using
35:32
that am I am I using
35:32
that am I am I using that Q
35:34
that Q
35:34
that Q yes I was looking for code inside the
35:37
yes I was looking for code inside the
35:37
yes I was looking for code inside the consultations controller but it's inside
35:40
consultations controller but it's inside
35:40
consultations controller but it's inside the patient
35:42
the patient
35:42
the patient controller so what's happening here is
35:46
controller so what's happening here is
35:46
controller so what's happening here is that I'm using this HTTP post attribute
35:49
that I'm using this HTTP post attribute
35:49
that I'm using this HTTP post attribute just a regular
35:51
just a regular
35:51
just a regular attribute and I'm using this name which
35:55
attribute and I'm using this name which
35:55
attribute and I'm using this name which is qes right
35:58
is qes right
35:58
is qes right and this is the name of the component of
36:02
and this is the name of the component of
36:02
and this is the name of the component of The Binding component that I want to
36:06
The Binding component that I want to
36:06
The Binding component that I want to use in other words I'm
36:10
use in other words I'm
36:10
use in other words I'm receiving those messages that are
36:13
receiving those messages that are
36:13
receiving those messages that are inserted in the
36:14
inserted in the
36:14
inserted in the queue right for creating
36:18
queue right for creating
36:18
queue right for creating patients this is just a way of you know
36:21
patients this is just a way of you know
36:21
patients this is just a way of you know I refactored the code for creating
36:25
I refactored the code for creating
36:25
I refactored the code for creating patience externally
36:28
patience externally
36:28
patience externally as a way of
36:29
as a way of
36:29
as a way of showing how some systems work when you
36:33
showing how some systems work when you
36:33
showing how some systems work when you are you know interoperating between
36:39
are you know interoperating between
36:39
are you know interoperating between platforms sometimes you need some kind
36:41
platforms sometimes you need some kind
36:41
platforms sometimes you need some kind of
36:42
of
36:42
of middleware and in this case I'm using
36:45
middleware and in this case I'm using
36:45
middleware and in this case I'm using the AER Q's um
36:49
component right so
36:51
component right so
36:51
component right so let's
36:54
let's
36:54
let's um please be with me I'm open the AER
36:58
um please be with me I'm open the AER
36:58
um please be with me I'm open the AER portal in this other browser which is in
37:01
portal in this other browser which is in
37:01
portal in this other browser which is in another
37:02
another
37:02
another monitor
37:04
monitor
37:04
monitor and let me show you it's right
37:09
and let me show you it's right
37:09
and let me show you it's right here right this is the storage
37:14
account and I have the
37:16
account and I have the
37:16
account and I have the cu's named my
37:19
cu's named my
37:19
cu's named my Q that's the name right here in the Q
37:24
Q that's the name right here in the Q
37:24
Q that's the name right here in the Q name property that I'm using
37:28
and let's create a new message and let's
37:32
and let's create a new message and let's
37:32
and let's create a new message and let's see if this is complete because I was
37:34
see if this is complete because I was
37:34
see if this is complete because I was implementing this code the other
37:36
implementing this code the other
37:36
implementing this code the other day so this is expecting a new patient
37:40
day so this is expecting a new patient
37:40
day so this is expecting a new patient again first name and last name as a way
37:44
again first name and last name as a way
37:44
again first name and last name as a way of creating patients
37:46
of creating patients
37:46
of creating patients right
37:48
right
37:48
right so let's verify if everything is running
37:53
so let's verify if everything is running
37:53
so let's verify if everything is running correctly I should be able to use this
37:56
correctly I should be able to use this
37:57
correctly I should be able to use this and
37:58
and
37:58
and let me pass components
38:02
path since you need a way to specify
38:08
path since you need a way to specify
38:08
path since you need a way to specify where your you know Jam
38:12
where your you know Jam
38:12
where your you know Jam files your new components are
38:16
files your new components are
38:16
files your new components are implemented
38:18
implemented
38:18
implemented okay so that's why I'm passing
38:20
okay so that's why I'm passing
38:20
okay so that's why I'm passing components path actually that's the old
38:23
components path actually that's the old
38:23
components path actually that's the old name of that flag the new one is
38:26
name of that flag the new one is
38:26
name of that flag the new one is resources have you can you can use that
38:29
resources have you can you can use that
38:29
resources have you can you can use that as well the thing here is that you're
38:33
as well the thing here is that you're
38:33
as well the thing here is that you're saying to the dopper side car hey you
38:35
saying to the dopper side car hey you
38:35
saying to the dopper side car hey you know what in this
38:37
know what in this
38:37
know what in this folder go and check all of the different
38:40
folder go and check all of the different
38:40
folder go and check all of the different files that are inside that folder and
38:42
files that are inside that folder and
38:42
files that are inside that folder and see if you can use those that's what's
38:45
see if you can use those that's what's
38:46
see if you can use those that's what's happening
38:47
happening
38:47
happening here and
38:50
here and
38:50
here and let's change the folder to
38:54
let's change the folder to
38:54
let's change the folder to consultations this is patients this is
38:56
consultations this is patients this is
38:56
consultations this is patients this is consultations
38:58
consultations
38:58
consultations d r blah blah blah I don't think I need
39:02
d r blah blah blah I don't think I need
39:02
d r blah blah blah I don't think I need components path in this
39:04
components path in this
39:04
components path in this other
39:06
other
39:06
other um in this other application since I'm
39:10
um in this other application since I'm
39:10
um in this other application since I'm just using the
39:11
just using the
39:11
just using the cues that binding in the patients
39:15
cues that binding in the patients
39:16
cues that binding in the patients microservice so I believe I don't need
39:19
microservice so I believe I don't need
39:19
microservice so I believe I don't need that uh component path or researches
39:22
that uh component path or researches
39:22
that uh component path or researches path flag
39:24
path flag
39:24
path flag here let's see what's going on let's
39:27
here let's see what's going on let's
39:27
here let's see what's going on let's execute this other
39:30
execute this other
39:30
execute this other application
39:33
and let's
39:36
and let's
39:36
and let's return so in this case of course if I
39:40
return so in this case of course if I
39:40
return so in this case of course if I clear the
39:42
clear the
39:43
clear the responses clear response and then
39:45
responses clear response and then
39:45
responses clear response and then execute this of course I don't have
39:48
execute this of course I don't have
39:48
execute this of course I don't have patience right now remember that I'm
39:51
patience right now remember that I'm
39:51
patience right now remember that I'm using the memory data provider
39:54
using the memory data provider
39:54
using the memory data provider right so if if I go to the Asher portal
40:00
right so if if I go to the Asher portal
40:00
right so if if I go to the Asher portal and then create a new
40:03
and then create a new
40:03
and then create a new message such as first name is going to
40:07
message such as first name is going to
40:07
message such as first name is going to be my name and then last name my last
40:13
be my name and then last name my last
40:13
be my name and then last name my last name and then I
40:16
name and then I
40:16
name and then I execute I mean I sent this message to
40:20
execute I mean I sent this message to
40:20
execute I mean I sent this message to the
40:21
the
40:21
the queue I can go
40:24
queue I can go
40:24
queue I can go ahead and see what's going on
40:28
ahead and see what's going on
40:28
ahead and see what's going on right so this is supposed to receive
40:33
right so this is supposed to receive
40:33
right so this is supposed to receive that um
40:34
that um
40:34
that um message so it looks like I'm having one
40:37
message so it looks like I'm having one
40:37
message so it looks like I'm having one or more validation
40:40
or more validation
40:40
or more validation errors
40:44
um so yeah it looks like my Json is not
40:49
um so yeah it looks like my Json is not
40:49
um so yeah it looks like my Json is not very well formatted or
40:53
something um
40:57
did it work no it didn't so my message
41:01
did it work no it didn't so my message
41:01
did it work no it didn't so my message is is
41:02
is is
41:02
is is wrong create message first
41:08
name
41:11
or new
41:14
patient I'm sure there's something wrong
41:18
patient I'm sure there's something wrong
41:18
patient I'm sure there's something wrong here but I can't remember what it
41:22
here but I can't remember what it
41:22
here but I can't remember what it is
41:25
is
41:25
is um anyway you know you you saw that
41:28
um anyway you know you you saw that
41:28
um anyway you know you you saw that message was received by The Binding of
41:31
message was received by The Binding of
41:31
message was received by The Binding of course the the Json itself is wrong
41:35
course the the Json itself is wrong
41:35
course the the Json itself is wrong first name last
41:37
first name last
41:37
first name last name new
41:40
name new
41:40
name new patient should I use new patient like
41:47
patient should I use new patient like
41:47
patient should I use new patient like this new patient and then the
41:51
this new patient and then the
41:51
this new patient and then the entire um
41:53
entire um
41:53
entire um structure should I do this
41:57
structure should I do this
41:57
structure should I do this I'm just wondering since I don't
41:59
I'm just wondering since I don't
41:59
I'm just wondering since I don't remember having this error and of course
42:02
remember having this error and of course
42:02
remember having this error and of course I need to debug this
42:04
I need to debug this
42:04
I need to debug this application however the key factor here
42:08
application however the key factor here
42:08
application however the key factor here and the main thing is that this method
42:12
and the main thing is that this method
42:12
and the main thing is that this method is going to be invoked
42:15
is going to be invoked
42:15
is going to be invoked automatically by the fact that I have a
42:17
automatically by the fact that I have a
42:17
automatically by the fact that I have a new message in the queue right I have
42:21
new message in the queue right I have
42:21
new message in the queue right I have some serialization problems right now
42:26
some serialization problems right now
42:26
some serialization problems right now um and again yeah this is trying to
42:29
um and again yeah this is trying to
42:29
um and again yeah this is trying to retrieve this message invalid start of a
42:33
retrieve this message invalid start of a
42:34
retrieve this message invalid start of a value uh the new patient field new
42:36
value uh the new patient field new
42:36
value uh the new patient field new patient field is
42:39
patient field is
42:39
patient field is required is that is that the the error
42:43
required is that is that the the error
42:43
required is that is that the the error new patient field is
42:48
required add message new
42:52
patient so this is the
42:59
I believe my Json is formatted correctly
43:02
I believe my Json is formatted correctly
43:02
I believe my Json is formatted correctly new patient is going to be first name
43:05
new patient is going to be first name
43:05
new patient is going to be first name and then last name this is what is this
43:08
and then last name this is what is this
43:08
and then last name this is what is this this is
43:10
this is
43:10
this is expecting first name last
43:12
expecting first name last
43:12
expecting first name last name H
43:16
interesting
43:19
so let's see if this is the the case is
43:25
so let's see if this is the the case is
43:25
so let's see if this is the the case is something uh is the
43:28
something uh is the
43:28
something uh is the is the one that is wrong but I don't
43:31
is the one that is wrong but I don't
43:31
is the one that is wrong but I don't think so I don't think so because
43:33
think so I don't think so because
43:33
think so I don't think so because serialization is ignoring the case yeah
43:36
serialization is ignoring the case yeah
43:37
serialization is ignoring the case yeah the new patient field is
43:39
the new patient field is
43:39
the new patient field is required this is
43:41
required this is
43:41
required this is fantastic this is fantastic let me see
43:44
fantastic this is fantastic let me see
43:44
fantastic this is fantastic let me see if we can just go and do this friends
43:48
if we can just go and do this friends
43:48
if we can just go and do this friends right let's receive the object and see
43:51
right let's receive the object and see
43:51
right let's receive the object and see what's going
43:53
what's going
43:53
what's going on right log information
43:57
on right log information
43:57
on right log information and then
44:02
let's do log information and then
44:06
let's do log information and then
44:06
let's do log information and then receive new patient new patient new
44:08
receive new patient new patient new
44:08
receive new patient new patient new patient that's fantastic thank you very
44:11
patient that's fantastic thank you very
44:11
patient that's fantastic thank you very much um intell
44:14
much um intell
44:14
much um intell code and yes
44:17
code and yes
44:17
code and yes let's stop
44:20
let's stop
44:20
let's stop this net build oh net
44:24
this net build oh net
44:24
this net build oh net build and then Dr
44:30
on with those
44:34
components new patient field is
44:38
components new patient field is
44:38
components new patient field is required yeah
44:40
required yeah
44:40
required yeah somehow the my Json message is
44:46
somehow the my Json message is
44:46
somehow the my Json message is wrong so maybe I can try using a single
44:50
wrong so maybe I can try using a single
44:50
wrong so maybe I can try using a single text you know a single line of text
44:54
text you know a single line of text
44:54
text you know a single line of text instead of trying to format this message
44:57
instead of trying to format this message
44:57
instead of trying to format this message S as
45:01
Json
45:04
Json
45:04
Json um
45:05
um
45:05
um anyway I'm
45:07
anyway I'm
45:07
anyway I'm gonna the code is right there for you to
45:10
gonna the code is right there for you to
45:10
gonna the code is right there for you to grab and uh see what's going
45:13
grab and uh see what's going
45:13
grab and uh see what's going on and let me show
45:15
on and let me show
45:15
on and let me show [Music]
45:17
[Music]
45:17
[Music] you please bear with me I'm going to
45:20
you please bear with me I'm going to
45:20
you please bear with me I'm going to show you
45:21
show you
45:21
show you the the repo for this
45:25
the the repo for this
45:25
the the repo for this solution which is right here hold on I'm
45:30
solution which is right here hold on I'm
45:30
solution which is right here hold on I'm using this other
45:32
using this other
45:32
using this other monitor
45:34
monitor
45:34
monitor um where is
45:36
um where is
45:36
um where is it Dapper in
45:39
it Dapper in
45:39
it Dapper in action yes this is the
45:42
action yes this is the
45:42
action yes this is the one okay so you can see that uh the code
45:48
one okay so you can see that uh the code
45:48
one okay so you can see that uh the code is has been uh sitting right there since
45:52
is has been uh sitting right there since
45:52
is has been uh sitting right there since three weeks ago and yeah I'm gonna
45:57
three weeks ago and yeah I'm gonna
45:57
three weeks ago and yeah I'm gonna I'm going to tell you what's going on
46:00
I'm going to tell you what's going on
46:00
I'm going to tell you what's going on and that particular message in the next
46:03
and that particular message in the next
46:03
and that particular message in the next session since I won't have the time to
46:07
session since I won't have the time to
46:07
session since I won't have the time to see what's going on with that message
46:10
see what's going on with that message
46:10
see what's going on with that message today Okay cool
46:14
so initially the learning checkpoint was
46:18
so initially the learning checkpoint was
46:18
so initially the learning checkpoint was a single or was uh uh prepare for a
46:22
a single or was uh uh prepare for a
46:22
a single or was uh uh prepare for a single session but of course in the last
46:24
single session but of course in the last
46:24
single session but of course in the last session I was choking in struggling with
46:27
session I was choking in struggling with
46:27
session I was choking in struggling with some health issues and that's why we
46:32
some health issues and that's why we
46:32
some health issues and that's why we splitted the learning checkpoint in two
46:35
splitted the learning checkpoint in two
46:35
splitted the learning checkpoint in two parts and today was part
46:39
parts and today was part
46:39
parts and today was part two remember you can go back in time and
46:42
two remember you can go back in time and
46:42
two remember you can go back in time and watch all the all the different
46:44
watch all the all the different
46:44
watch all the all the different recordings that we have and in the next
46:48
recordings that we have and in the next
46:48
recordings that we have and in the next session we will
46:50
session we will
46:50
session we will continue uh implementing some other
46:54
continue uh implementing some other
46:54
continue uh implementing some other building blocks such as the workflow
46:57
building blocks such as the workflow
46:57
building blocks such as the workflow building
46:58
building
46:58
building block and the actors building block and
47:03
block and the actors building block and
47:03
block and the actors building block and so on so we're right in the middle of
47:06
so on so we're right in the middle of
47:06
so on so we're right in the middle of the of the
47:08
the of the
47:08
the of the show and yeah let's um call it a day and
47:15
show and yeah let's um call it a day and
47:15
show and yeah let's um call it a day and thank you for watching and remember you
47:18
thank you for watching and remember you
47:18
thank you for watching and remember you can go back in time and watch the
47:20
can go back in time and watch the
47:20
can go back in time and watch the recordings and you have the repo right
47:25
recordings and you have the repo right
47:25
recordings and you have the repo right there and GitHub let me show you once
47:30
there and GitHub let me show you once
47:30
there and GitHub let me show you once again
47:32
again
47:32
again the URL I'm gonna put it right here this
47:38
the URL I'm gonna put it right here this
47:38
the URL I'm gonna put it right here this is a place where I'm goingon to uh
47:40
is a place where I'm goingon to uh
47:40
is a place where I'm goingon to uh upload all the different um applications
47:44
upload all the different um applications
47:44
upload all the different um applications that I'm building in this show
47:47
that I'm building in this show
47:47
that I'm building in this show okay perfect so thank you for watching
47:52
okay perfect so thank you for watching
47:52
okay perfect so thank you for watching friends and see you next time
47:56
friends and see you next time
47:56
friends and see you next time [Music]


