Stored Procedure within Service Broker not able to access another database under same server instance

I have created a service Broker which is executing through Queue formed with the help of Trigger on a table. I have to call another Database's Stored Procedure/Function from my current database's Queue_Procedure. And when trying to execute it, I am getting below error.

The activated proc '[dbo].[spGenerateProc_Test_RJ]' running on queue 'FirstDatabase.dbo.TestQueue_Test_RJ' output the following: 'The server principal "sa" is not able to access the database "SecondDatabase" under the current security context.'

Below is all query in steps I am using to create Service broker Queue and use it.

--Step 1:

Use FirstDatabaseName;
ALTER DATABASE FirstDatabaseName SET ENABLE_BROKER WITH ROLLBACK IMMEDIATE;

--Step 2:

CREATE TABLE PriceData_auditlog_Test_RJ
(
            xmlstring xml
)
GO
CREATE PROCEDURE [dbo].[spGenerateProc_Test_RJ]
WITH EXECUTE AS CALLER
AS
BEGIN
    DECLARE @message_type varchar(100)
    DECLARE @dialog uniqueidentifier, @message_body XML;
    WHILE (1 = 1)
    BEGIN -- Receive the next available message from the queue
        WAITFOR (
            RECEIVE TOP(1) @message_type = message_type_name,
            @message_body = CAST(message_body AS XML),
            @dialog = conversation_handle
            FROM dbo.TestQueue_Test_RJ
        ), TIMEOUT 500
        IF (@@ROWCOUNT = 0 OR @message_body IS NULL)
        BEGIN
            BREAK
        END
        ELSE
        BEGIN
            --process xml message here...
            INSERT INTO PriceData_auditlog_Test_RJ values(@message_body)

            SELECT BlobData.dbo.Get_BlobTagsCount_Test_RJ()
        END

        END CONVERSATION @dialog
    END
END

--step 3: Create Message Type

CREATE MESSAGE TYPE TestMessage_Test_RJ
AUTHORIZATION dbo
VALIDATION = WELL_FORMED_XML;

--step 4: Create Contract

CREATE CONTRACT TestContract_Test_RJ
AUTHORIZATION dbo
(TestMessage_Test_RJ SENT BY INITIATOR);

-- step 5: Create Queue

CREATE QUEUE dbo.TestQueue_Test_RJ WITH STATUS=ON, ACTIVATION
(STATUS = ON, MAX_QUEUE_READERS = 7,
PROCEDURE_NAME = [dbo].[spGenerateProc_Test_RJ],   EXECUTE AS N'dbo');

-- step 6: Create Service Initiator

CREATE SERVICE TestServiceInitiator_Test_RJ
AUTHORIZATION dbo
ON QUEUE dbo.TestQueue_Test_RJ (TestContract_Test_RJ);

--step 7: Create target Service

CREATE SERVICE [TestServiceTarget_Test_RJ]
AUTHORIZATION dbo
ON QUEUE dbo.TestQueue_Test_RJ (TestContract_Test_RJ);

--Step 8: CREATE Trigger on FirstDatabase table

CREATE  TRIGGER [dbo].[Trg_PriceData_Update_Test_RJ]
    ON  FirstDatabaseName.dbo.Price
    FOR UPDATE
    AS
    BEGIN
        SET NOCOUNT ON;
        DECLARE @MessageBody XML

        --get relevant information from inserted/deleted and convert to xml message
        SET @MessageBody = (SELECT ProductID FROM inserted FOR XML AUTO)

        If (@MessageBody IS NOT NULL)
        BEGIN

            SELECT @MessageBody

            DECLARE @Handle UNIQUEIDENTIFIER;

            BEGIN DIALOG CONVERSATION @Handle
                FROM SERVICE [TestServiceInitiator_Test_RJ]
                TO SERVICE 'TestServiceTarget_Test_RJ'
                ON CONTRACT [TestContract_Test_RJ]
                WITH ENCRYPTION = OFF;

            SEND ON CONVERSATION @Handle
            MESSAGE TYPE [TestMessage_Test_RJ](@MessageBody);

        END
    END
    GO

--Update statement to fire trigger which executes Service Broker Queue

Update FirstDatabaseName.dbo.Price
SET Price=141.833
WHERE ID=1408166

I have also followed steps mentioned in Blog link

But still I am getting same error.

The activated proc '[dbo].[spGenerateProc_Test_RJ]' running on queue 'FirstDatabase.dbo.BundleQueue_Test_RJ' output the following: 'The server principal "sa" is not able to access the database "SecondDatabase" under the current security context.'

Edit: By referring link, Below are the steps I have used for creating certificate to use function/Procedure in other database.

Source db configuration

--Certificate Installation Start
-- Create a certificate with a private key

USE [FirstDatabseName]
GO
CREATE CERTIFICATE [spGenerateBundleProcAudit_Test_RJ]
      ENCRYPTION BY PASSWORD = 'Password#1234'
      WITH SUBJECT = 'spGenerateBundleProcedure Signing  for audit certificate';
GO

--Sign the procedure with the certificate’s private key
ADD SIGNATURE TO OBJECT::[spGenerateBundleProc_Test_RJ]
      BY CERTIFICATE [spGenerateBundleProcAudit_Test_RJ]
            WITH PASSWORD = 'Password#1234';

GO

--Drop the private key. This way it cannot be
-- used again to sign other procedures.
ALTER CERTIFICATE [spGenerateBundleProcAudit_Test_RJ]
      REMOVE PRIVATE KEY;
GO

--We must backup to a file and create
--the certificate in [master] from this file

BACKUP CERTIFICATE [spGenerateBundleProcAudit_Test_RJ]
      TO FILE = 'C:\spGenerateBundleProcAudit2_Test_RJ.CER';
GO

Target db configuration

USE [SecondDatabseName]
GO

--DROP CERTIFICATE [spGenerateBundleProcAudit_Test_RJ]
CREATE CERTIFICATE [spGenerateBundleProcAudit_Test_RJ]
      FROM FILE = 'C:\spGenerateBundleProcAudit2_Test_RJ.CER';
GO

--DROP USER [spGenerateBundleProcAudit_Test_RJ]
CREATE USER [spGenerateBundleProcAudit_Test_RJ]
    FROM CERTIFICATE [spGenerateBundleProcAudit_Test_RJ];
GO

--‘AUTHENTICATE’ permission is required for all other permissions to take effect
GRANT AUTHENTICATE TO [spGenerateBundleProcAudit_Test_RJ];

GRANT EXECUTE ON [Get_BlobTagsCount_Test_RJ] TO [spGenerateBundleProcAudit_Test_RJ];
GO

--Enable back the disabled ‘SessionsService’ queue
ALTER QUEUE dbo.TestQueue_Test_RJ WITH STATUS=ON
GO

--Certificate Installation End
How many English words
do you know?
Test your English vocabulary size, and measure
how many words do you know
Online Test
Powered by Examplum