본문 바로가기
GraphQL(HotChocolate)

.NET 6] Hot Chocolate GraphQL : subscription(7)

by Fastlane 2022. 4. 19.
728x90
반응형

subscription은 real-time event notification이다. 해당 기능을 위해서, subscription은 web socket을 사용한다. 

 

request pipeline에 web socket을 추가 후, subscription을 build 해보자.

 

 1. SubscriptionType 추가 

Subscription.cs 

using BulkyBook.Models;

namespace BulkyBook.GraphQL
{
    public class Subscription
    {   
        [Subscribe]
        [Topic]
        public Author OnAuthorAdded([EventMessage] Author author) => author;
    }
}

 

2. request pipeline에 websoket 추가 

Program.cs

app.UseHttpsRedirection();
app.UseStaticFiles();

app.UseWebSockets();

app.UseRouting();

app.UseAuthentication();

 

3. service에 SubscriptionType 추가 

Program.cs

builder.Services
    .AddGraphQLServer()
    .AddQueryType<Query>()
    .AddType<AuthorType>()
    .AddType<BookType>()
    .AddProjections()
    .AddFiltering()
    .AddSorting()
    .AddMutationType<Mutation>()
    .AddSubscriptionType<Subscription>()
    .AddInMemorySubscriptions();

 

4. Mutation에 EventSender 추가 

Mutation.cs

    public class Mutation
    {

        [UseDbContext(typeof(ApplicationDbContext))]
        public async Task<AddAuthorPayload> AddAuthroAsync(
            AddAuthorInput input,
            [ScopedService] ApplicationDbContext context,
            [Service] ITopicEventSender eventSender,
            CancellationToken cancellationToken)
        {
            var author = new Author
            {
                Name = input.Name
            };

            context.Authors.Add(author);
            await context.SaveChangesAsync();

            await eventSender.SendAsync(nameof(Subscription.OnAuthorAdded), author, cancellationToken);

            return new AddAuthorPayload(author);

        }

    }

 

5. Event가 잘 생성되는지 테스트해보자. 

Banana Pop Cake에서 subscription을 실행해보자. 

 

1) subscription을 Run 하면 web socket으로 연결되어 event를 listen하고 있다. 

2) postman으로 author를 추가하는 mutation을 보낸다. 

3) mutation으로 추가된 저자의 데이터를 보여준다. 

 

728x90
반응형

댓글